Alembic --autogenerate produisant une migration à vide
Je suis en train d'utiliser Alembic
pour la première fois et que vous voulez utiliser --autogenerate
décrit ici
Mon projet de la structure ressemble à
project/
configuration/
__init__.py
dev.py
test.py
core/
app/
models/
__init__.py
user.py
db/
alembic/
versions/
env.py
alembic.ini
Je suis en utilisant Flask
et SQLAlchemy
et leur Flask-SQLAlchemy
extension. mon modèle User
ressemble
class User(UserMixin, db.Model):
__tablename__ = 'users'
# noinspection PyShadowingBuiltins
uuid = Column('uuid', GUID(), default=uuid.uuid4, primary_key=True,
unique=True)
email = Column('email', String, nullable=False, unique=True)
_password = Column('password', String, nullable=False)
created_on = Column('created_on', sa.types.DateTime(timezone=True),
default=datetime.utcnow())
last_login = Column('last_login', sa.types.DateTime(timezone=True),
onupdate=datetime.utcnow())
Comme décrit icij'ai modifié env.py
à ressembler à
from configuration import app
alembic_config = config.get_section(config.config_ini_section)
alembic_config['sqlalchemy.url'] = app.config['SQLALCHEMY_DATABASE_URI']
engine = engine_from_config(
alembic_config,
prefix='sqlalchemy.',
poolclass=pool.NullPool)
et
from configuration import db
target_metadata = db.metadata
où configuration.__init__py
ressemble
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import dev
app = Flask(__name__)
app.config.from_envvar('SETTINGS_PT')
db = SQLAlchemy(app)
Maintenant quand je lance la migration
$alembic revision --autogenerate -m "Added user table"
INFO [alembic.migration] Context impl PostgresqlImpl.
INFO [alembic.migration] Will assume transactional DDL.
Generating /Users/me/IdeaProjects/project/db/alembic/versions/55a9d5
35d8ae_added_user_table.py...done
mais fichier alembic/versions/55a9d5
a vide upgrade()
et downgrade()
méthodes
"""Added user table
Revision ID: 1b62a62eef0d
Revises: None
Create Date: 2013-03-27 06:37:08.314177
"""
# revision identifiers, used by Alembic.
revision = '1b62a62eef0d'
down_revision = None
from alembic import op
import sqlalchemy as sa
def upgrade():
### commands auto generated by Alembic - please adjust! ###
pass
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
pass
### end Alembic commands ###
Comment se fait-il n'est pas capable de comprendre qu'il ya une nouvelle User
modèle?
S'il vous plaît aider
source d'informationauteur daydreamer
Vous devez vous connecter pour publier un commentaire.
Comme par @zzzeek, après j'ai inclus les éléments suivants dans mon
env.py
j'ai pu travailler avec--autogenerate
optiondans
env.py
sousrun_migrations_online()
ensuite, j'ai couru
alembic revision --autogenerate -m "Added initial table"
et a obtenuMerci Michael pour ton aide!
Je pense qu'il est intéressant de souligner ici que j'ai eu le même problème dans la version actuelle (0.8.4), mais la méthode de configuration des métadonnées semble être devenue plus explicite: En plus de l'importation d'un modèle, vous devez également définir
target_metadata
(qui est présent dansenv.py
mais par défautNone
).La la documentation suggère l'importation de quelque chose qu'ils appelaient
Base
mais il n'est pas clair exactement ce qui est; l'importation de la DeclarativeBase instance mes modèles héritent de n'a rien fait pour moi (même résultat que l'OP).Les commentaires dans le code, cependant, suggèrent réglage
target_metadata
l'aide d'un modèle réel (ModelNameHere.metadata
), ce qui a fonctionné pour moi (à l'aide d'un modèle de métadonnées de l', a donné lieu à eux d'être détecté).