2011-11-23 84 views
5

這是我的文件至今:使用SQLAlchemy創建我的表之後,如何向其添加其他列?

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:[email protected]/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) 

這個文件是非常簡單的。它創建一個用戶和地址表。運行這個文件後,表格被創建。

但現在我想添加一列到「用戶」。我怎樣才能做到這一點?我需要做什麼?

+1

是否要在不更改現有代碼的情況下添加列? – Nilesh

+0

@lafada我不知道。我只是想添加列。 – user1061003

+2

然後你最好的方法是sqlalchemy-migrate :)。 – Nilesh

回答

3

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

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

但是,這不會觸發ALTER TABLE命令在數據庫中添加該列。根據文檔append_column給出的命令,您必須在模型中添加該列後手動運行。

1

簡短回答:您不能:AFAIK,目前無法直接從sqlalchemy做到這一點。

如果您經常更改模型並將不同版本推出到生產環境中,則可以使用sqlalchemy-migrate這種方法。否則,這可能是一種矯枉過正,你可能會更好地手動生成ALTER TABLE ...腳本。

相關問題