8 Stimmen

Wie kann ich, nachdem ich meine Tabellen mit SQLAlchemy erstellt habe, zusätzliche Spalten hinzufügen?

Dies ist meine bisherige Datei:

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)

Diese Datei ist ziemlich einfach. Sie erstellt eine Benutzer- und eine Adresstabelle. Nachdem ich diese Datei ausgeführt habe, werden die Tabellen erstellt.

Aber jetzt möchte ich eine Spalte "Benutzer" hinzufügen. Wie kann ich das tun? Was muss ich tun?

8voto

Nilesh Punkte 19313

Sie können eine Spalte mit Tabelle.append_column Methode.

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

Dies führt jedoch nicht zum Auslösen der ALTER TABLE um diese Spalte in der Datenbank hinzuzufügen. Wie im Dokument angegeben für append_column diesen Befehl müssen Sie manuell ausführen, nachdem Sie die Spalte im Modell hinzugefügt haben.

2voto

van Punkte 66788

Kurze Antwort: Sie können nicht : AFAIK, gibt es derzeit keine Möglichkeit, dies von sqlalchemy direkt.

Sie können aber auch sqlalchemy-migrate wenn Sie Ihr Modell häufig ändern und verschiedene Versionen in die Produktion einfließen lassen. Andernfalls könnte es ein Overkill sein, und Sie sind vielleicht besser dran, wenn Sie die ALTER TABLE ... Skripte manuell.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X