2013-03-27 10 views
14

उत्पादन --autogenerate मैं पहली बार के लिए Alembic उपयोग करने के लिए कोशिश कर रहा हूँ और --autogenerate सुविधा वर्णित hereभबका खाली प्रवास

मेरे परियोजना संरचना लग रहा है का उपयोग करना चाहते

तरह
project/ 
     configuration/ 
        __init__.py 
        dev.py 
        test.py 
     core/ 
      app/ 
       models/ 
        __init__.py 
        user.py 
     db/ 
      alembic/ 
        versions/ 
        env.py 
      alembic.ini 

मैं Flask और SQLAlchemy उपयोग कर रहा हूँ और उनके Flask-SQLAlchemy एक्सटेंशन। अपने मॉडल User लगता है कि

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()) 

के रूप में वर्णित here, मैं env.py संशोधित

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) 

और

from configuration import db 


target_metadata = db.metadata 

जहां configuration.__init__py

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
import dev 


app = Flask(__name__) 
app.config.from_envvar('SETTINGS_PT') 
db = SQLAlchemy(app) 
तरह लग रहा है की तरह लग रहे करने के लिए 63,210

अब जब मैं प्रवास

$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 

चलाने लेकिन फाइल alembic/versions/55a9d5 खाली upgrade() और downgrade() तरीकों

"""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 ### 

कैसे आ इसे समझने के लिए एक नया User मॉडल है कि वहाँ में सक्षम नहीं है है? कृपया मदद

+5

आपके एलेम्बिक env.py को यह सुनिश्चित करना है कि उसने उस उपयोगकर्ता मॉडल को आयात किया है ताकि तालिका माइग्रेशन चलने पर स्मृति में मौजूद हो। – zzzeek

+0

वह था!आपकी मदद के लिए बहुत बहुत धन्यवाद माइकल – daydreamer

+0

उपयोगी हो सकता है: यदि कॉलम अपडेट करने के बाद उत्पन्न खाली माइग्रेशन, तो यह उत्तर देखें http://stackoverflow.com/a/17176843/1339254 – alexche8

उत्तर

16

प्रति @zzzeek के रूप में, के बाद मैं अपने env.py में निम्नलिखित शामिल है, मैं run_migrations_online()

from configuration import app 
from core.expense.models import user # added my model here 

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) 

तहत --autogenerate विकल्प

env.py में

के साथ काम करने में सक्षम था तो मैं alembic revision --autogenerate -m "Added initial table" भाग गया और मिल गया

def upgrade(): 
    ### commands auto generated by Alembic - please adjust! ### 
    op.create_table('users', 
    sa.Column('uuid', sa.GUID(), nullable=False), 
    sa.Column('email', sa.String(), nullable=False), 
    sa.Column('password', sa.String(), nullable=False), 
    sa.Column('created_on', sa.DateTime(timezone=True), nullable=True), 
    sa.Column('last_login', sa.DateTime(timezone=True), nullable=True), 
    sa.PrimaryKeyConstraint('uuid'), 
    sa.UniqueConstraint('email'), 
    sa.UniqueConstraint('uuid') 
    ) 
    ### end Alembic commands ### 

धन्यवाद आपके सभी एच के लिए माइकल हायता!

0

मुझे लगता है कि यह वर्तमान बिंदु (0.8.4) में एक ही समस्या है, लेकिन मेटाडाटा सेट करने की विधि अधिक स्पष्ट हो गई है: मॉडल आयात करने के अलावा, आपको एक मॉडल आयात करने के अलावा, आपको target_metadata भी सेट करें (जो env.py में मौजूद है लेकिन None पर डिफ़ॉल्ट है)।

documentationBase नामक कुछ आयात करने का सुझाव देता है, लेकिन यह स्पष्ट नहीं है कि वास्तव में क्या है; DeclarativeBase उदाहरण आयात करना मेरे मॉडल के उत्तराधिकारी से मेरे लिए कुछ भी नहीं किया (ओपी के समान परिणाम)।

कोड में वास्तविक टिप्पणियां, हालांकि, एक वास्तविक मॉडल (ModelNameHere.metadata) है, जो मेरे लिए काम किया है का उपयोग कर target_metadata स्थापित करने का सुझाव (का उपयोग करते हुए एक मॉडल के मेटाडाटा उन सभी के परिणामस्वरूप पता लगाया जा रहा है)।

संबंधित मुद्दे