J'ai découvert comment faire ** Alter ** avec ** SQLAlchemy **, alors j'aimerais l'écrire comme rappel.
Malheureusement, SQLAlchemy ne semble pas prendre en charge de fonctionnalités spéciales pour exécuter Alter.
En règle générale, modifiez le schéma à l'aide d'un outil de migration tel que Alembic ou SQLAlchemy-Migrate. Faire.
De plus, si vous voulez vraiment changer le schéma dynamiquement, Connection.execute () ou Utilisez DDL.
Documents officiels> Modifier les schémas lors des migrations http://docs.sqlalchemy.org/en/latest/core/metadata.html#altering-schemas-through-migrations
Exemple de code pour ajouter une nouvelle colonne «kana» à la table.
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)
#Déposez la table
Base.metadata.drop_all(engine)
#Créer une table
Base.metadata.create_all(engine)
#Ajouter une colonne à la table
column = sqlalchemy.Column('kana', sqlalchemy.String(40), primary_key=False)
Student.add_column(engine, column)
if __name__ == '__main__':
main()
Recommended Posts