【问题标题】:After I create my tables using SQLAlchemy, how can I add additional columns to it?使用 SQLAlchemy 创建表后,如何向其中添加其他列?
【发布时间】:2012-01-04 10:01:48
【问题描述】:

这是我目前的文件:

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)

这个文件很简单。它创建一个用户和地址表。运行此文件后,将创建表。

但现在我想在“用户”中添加一列。我怎样才能做到这一点?我需要做什么?

【问题讨论】:

  • 是否要在不更改现有代码的情况下添加列?
  • @lafada 我不知道。我只想为其添加列。
  • 那么你最好的方法是 sqlalchemy-migrate :)。

标签: mysql database orm sqlalchemy


【解决方案1】:

您可以使用Table.append_column 方法添加列。

test = Column('test', Integer)
User.__table__.append_column(test)

但这不会触发ALTER TABLE 命令将该列添加到数据库中。根据为append_column 提供的文档,您必须在模型中添加该列后手动运行该命令。

【讨论】:

  • 对于ORM的某些部分,除了调用__table__.append_column,你还需要设置User.__mapper__.add_property('test', test)——就像在SQLAlchemy中所做的source
【解决方案2】:

简答:你不能:AFAIK,目前无法直接从sqlalchemy 做到这一点。

但是,如果您经常更改模型并将不同的版本投入生产,则可以使用 sqlalchemy-migrate。否则这可能是一种矫枉过正,您最好手动生成ALTER TABLE ... 脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多