Ich habe herausgefunden, wie man ** Alter ** mit ** SQLAlchemy ** macht, also möchte ich es als Erinnerung schreiben.
Leider scheint SQLAlchemy keine speziellen Funktionen zum Ausführen von Alter zu unterstützen.
Ändern Sie das Schema im Allgemeinen mit einem Migrationstool wie Alembic oder SQLAlchemy-Migrate. Machen.
Wenn Sie das Schema wirklich dynamisch ändern möchten, wählen Sie Connection.execute () oder Verwenden Sie DDL.
Offizielle Dokumente> Ändern von Schemata durch Migrationen http://docs.sqlalchemy.org/en/latest/core/metadata.html#altering-schemas-through-migrations
Beispielcode zum Hinzufügen einer neuen Spalte "kana" zur Tabelle.
sqlalchemy_alter.py
# -*- coding:utf-8 -*-
import sqlalchemy
import sqlalchemy.ext.declarative
Base = sqlalchemy.ext.declarative.declarative_base()
class Student(Base):
__tablename__ = 'students'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(20))
@staticmethod
def add_column(engine, column):
column_name = column.compile(dialect=engine.dialect)
column_type = column.type.compile(engine.dialect)
engine.execute('ALTER TABLE %s ADD COLUMN %s %s' % (Student.__tablename__, column_name, column_type))
def main():
url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'
engine = sqlalchemy.create_engine(url, echo=True)
#Lass den Tisch fallen
Base.metadata.drop_all(engine)
#Tabelle erstellen
Base.metadata.create_all(engine)
#Spalte zur Tabelle hinzufügen
column = sqlalchemy.Column('kana', sqlalchemy.String(40), primary_key=False)
Student.add_column(engine, column)
if __name__ == '__main__':
main()
Recommended Posts