2014-06-17 29 views
5

İlk kez yükseltmeyi çalıştırmayı denediğimde bu hataya giriyorum. Bir name niteliği vermiş olmama rağmen, gender_types enum üzerinde başarısız görünüyor.Geçişleri çalıştırırken hata oluştu: sqlalchemy.exc.CompileError: Postgresql ENUM türünde bir adlandırma gerekiyor

Bunun için bir düzeltme var mı? SQL'in ne üretildiğini görmenin bir yolu var mı?

Bu benim models.py adresim ve flask.ext.migrate.upgrade'yi çalıştırdığımda aldığım hata budur.

class User(UserMixin, db.Model): 
    __tablename__ = 'users' 
    id = db.Column(db.Integer, primary_key=True) 
    first = db.Column(db.String(64)) 
    last = db.Column(db.String(64)) 
    dob = db.Column(db.Date) 
    street_addr1 = db.Column(db.String(64)) 
    street_addr2 = db.Column(db.String(64)) 
    city = db.Column(db.String(64)) 
    state = db.Column(db.String(2)) 
    zip = db.Column(db.String(9)) 
    gender = db.Column(db.Enum('M', 'F', name='gender_types')) 
    home_box = db.Column(db.String(32)) 
    username = db.Column(db.String(64), unique=True, index=True) 
    password_hash = db.Column(db.String(128)) 

    @property 
    def password(self): 
     raise AttributeError('password is not a readable attribute') 

    @password.setter 
    def password(self, password): 
     self.password_hash = generate_password_hash(password) 

    def verify_password(self, password): 
     return check_password_hash(self.password_hash, password) 
    def __repr__(self): 
     return '<User %r>' % self.username 

@login_manager.user_loader 
def load_user(user_id): 
    return User.query.get(int(user_id)) 

class Competition(db.Model): 
    __tablename__ = 'competitions' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(12)) 

Terminal çıkışı: Bu çünkü olur derlemek bir SQLAlchemy hatası, çünkü

Sen Enum ad öznitelik eklemek gerekir
(venv)Nates-MacBook-Pro-2:competitions nate$ heroku run python manage.py deploy 
Running `python manage.py deploy` attached to terminal... up, run.8483 
INFO [alembic.migration] Context impl PostgresqlImpl. 
INFO [alembic.migration] Will assume transactional DDL. 
INFO [alembic.migration] Running upgrade None -> 3c7e6046cf6, initial migration 
Traceback (most recent call last): 
    File "manage.py", line 36, in <module> 
    manager.run() 
    File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/__init__.py", line 405, in run 
    result = self.handle(sys.argv[0], sys.argv[1:]) 
    File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/__init__.py", line 384, in handle 
    return handle(app, *positional_args, **kwargs) 
    File "/app/.heroku/python/lib/python2.7/site-packages/flask_script/commands.py", line 145, in handle 
    return self.run(*args, **kwargs) 
    File "manage.py", line 25, in deploy 
    upgrade() 
    File "/app/.heroku/python/lib/python2.7/site-packages/flask_migrate/__init__.py", line 98, in upgrade 
    command.upgrade(config, revision, sql = sql, tag = tag) 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/command.py", line 124, in upgrade 
    script.run_env() 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/script.py", line 199, in run_env 
    util.load_python_file(self.dir, 'env.py') 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/util.py", line 199, in load_python_file 
    module = load_module(module_id, path) 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/compat.py", line 55, in load_module 
    mod = imp.load_source(module_id, path, fp) 
    File "migrations/env.py", line 72, in <module> 
    run_migrations_online() 
    File "migrations/env.py", line 65, in run_migrations_online 
    context.run_migrations() 
    File "<string>", line 7, in run_migrations 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/environment.py", line 652, in run_migrations 
    self.get_context().run_migrations(**kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/migration.py", line 225, in run_migrations 
    change(**kw) 
    File "migrations/versions/3c7e6046cf6_initial_migration.py", line 33, in upgrade 
    sa.PrimaryKeyConstraint('id') 
    File "<string>", line 7, in create_table 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/operations.py", line 647, in create_table 
    self._table(name, *columns, **kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/alembic/ddl/impl.py", line 148, in create_table 
    _ddl_runner=self) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/event.py", line 409, in __call__ 
    fn(*args, **kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 404, in __call__ 
    return getattr(self.target, self.name)(*arg, **kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/types.py", line 1933, in _on_table_create 
    t._on_table_create(target, bind, **kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/base.py", line 870, in _on_table_create 
    self.create(bind=bind, checkfirst=checkfirst) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/base.py", line 821, in create 
    bind.execute(CreateEnumType(self)) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 662, in execute 
    params) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 714, in _execute_ddl 
    compiled = ddl.compile(dialect=dialect) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/sql/expression.py", line 1920, in compile 
    return self._compiler(dialect, bind=bind, **kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/schema.py", line 2954, in _compiler 
    return dialect.ddl_compiler(dialect, self, **kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/engine/interfaces.py", line 804, in __init__ 
    self.string = self.process(self.statement, **compile_kwargs) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/engine/interfaces.py", line 823, in process 
    return obj._compiler_dispatch(self, **kwargs) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", line 80, in _compiler_dispatch 
    return meth(self, **kw) 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/base.py", line 1072, in visit_create_enum_type 
    self.preparer.format_type(type_), 
    File "/app/.heroku/python/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/base.py", line 1254, in format_type 
    raise exc.CompileError("Postgresql ENUM type requires a name.") 
sqlalchemy.exc.CompileError: Postgresql ENUM type requires a name. 
+1

db.Enum('M', 'F', name='gender_types') gibi Sen SQL göremiyorum SQL'in nasıl yayılacağını bile bilmiyor. Alemik göçün Enum'un belirtimindeki adı içermediği anlaşılıyor; 'migrations/versions/3c7e6046cf6_initial_migration.py' örneğinde olup olmadığını kontrol edebilir misiniz? – univerio

+1

Göçler eskiydi ve Enum'da isim niteliğini içermeyen bir modele dayanarak anladım. Teşekkürler, göçleri yeniden yapılandım ve şimdi iyi çalışıyor. –

+0

Bunu bir cevap olarak eklemelisiniz çünkü enumların adlara ihtiyacı olduğunu bilmek ve oluşturulmadan önce oluşturduğunuz geçişleri kontrol etmelisiniz. – davidism

cevap

İlgili konular