这是我到目前为止的文件:
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import Column, Integer, String
from sqlalchemy import Table, Text
engine = create_engine('mysql://root:ababab@localhost/alctest',
echo=False)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key = True)
name = Column(String(100))
fullname = Column(String(100))
password = Column(String(100))
addresses = relationship("Address", order_by="Address.id", backref="user")
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key = True)
email_address = Column(String(100), nullable=False)
#foreign key, must define relationship
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", backref = backref('addresses',order_by=id))
Base.metadata.create_all(engine)
这个文件非常简单。它创建了一个User和Address表。运行这个文件之后,表就创建好了。
但是现在我想添加一个列到"User"。我该怎么做呢?我要做什么?
可以用Table添加列。append_column方法。
test = Column('test', Integer)
User.__table__.append_column(test)
但是这不会触发ALTER TABLE
命令在数据库中添加该列。根据append_column
给出的文档,您必须在模型中添加该列后手动运行该命令。
简短回答:你不能: AFAIK,目前没有办法从sqlalchemy
直接做到这一点。
但是,如果您经常更改模型并将不同的版本推出到生产环境中,则可以使用sqlalchemy-migrate。否则它可能是多余的,您最好手动生成ALTER TABLE ...
脚本。