Как я могу добавить дополнительные столбцы после создания таблиц с помощью SQLAlchemy? - PullRequest
5 голосов
/ 23 ноября 2011

Пока это мой файл:

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)

Этот файл довольно прост. Он создает таблицы пользователей и адресов. После запуска этого файла создаются таблицы.

Но теперь я хочу добавить столбец в «Пользователь». Как я могу это сделать? Что мне нужно сделать?

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

Вы можете добавить столбец с помощью метода Table.append_column .

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

Но это не вызовет команду ALTER TABLE для добавления этого столбца в базу данных.Согласно документу, указанному для append_column, эту команду необходимо запустить вручную после добавления этого столбца в модель.

1 голос
/ 23 ноября 2011

Краткий ответ: Вы не можете : AFAIK, в настоящее время нет способа сделать это непосредственно из sqlalchemy.

Как бы то ни было, вы можете использовать sqlalchemy-migrate для этого, если вы часто меняете свою модель и выпускаете разные версии в производство. В противном случае это может быть излишним, и вам лучше сгенерировать сценарии ALTER TABLE ... вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...