2016-04-23 8 views
1

私は57行でFlask-commonからこのコードのスニペットを見た:だから私は、私はそれを与えると思っは、型の要素<クラスのsqlalchemy.dialects.postgresql.base.UUIDを '>レンダリングできない

id = db.Column(UUID, default=lambda: str(uuid.uuid4()), primary_key=True) 

試してみて、それを使用して私のアプリのmodels.py

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
from sqlalchemy.dialects.postgresql import UUID 
import uuid 

from app import db 

class CostCenter(db.Model): 
    __tablename__ = "costcenter" 

    id = db.Column('id', UUID(as_uuid=True), default=lambda: str(uuid.uuid4()), primary_key=True) 
    name = db.Column('name', db.Text) 

    def __init__(self, name): 
     self.name = name 

    def __repr__(self): 
     return '<id {}>'.format(self.id) 

を(私は私のidのためuuidタイプを持っていることを好むので)しかし、私はpython manage.py db upgradeを実行しようとすると、エラーになり:

File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 190, in __init__               
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 213, in process               
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch             
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 2164, in visit_create_table            
    File "build/bdist.linux-x86_64/egg/sqlalchemy/util/compat.py", line 199, in raise_from_cause             
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 2153, in visit_create_table            
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 213, in process               
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch             
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 2184, in visit_create_column            
    File "build/bdist.linux-x86_64/egg/sqlalchemy/dialects/sqlite/base.py", line 847, in get_column_specification         
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/compiler.py", line 261, in process               
    File "build/bdist.linux-x86_64/egg/sqlalchemy/sql/visitors.py", line 79, in _compiler_dispatch             
sqlalchemy.exc.CompileError: (in table 'costcenter', column 'id'): Compiler <sqlalchemy.dialects.sqlite.base.SQLiteTypeCompiler object at 0x7fc16 
c1f1a50> can't render element of type <class 'sqlalchemy.dialects.postgresql.base.UUID'> 

なぜ型UUIDをレンダリングできないのですか? SQLAlchemyには認識されていますが、どのようにしてFlask-SQLAlchemyに入りませんか?

+3

を。彼らは2つの異なるデータベースです。 – dirn

答えて

1

カラムの定義では、postgresqlのみで動作する関数を使用しています。データベースのタイプはsqliteです。

あなたはこの必要があります:あなたはSQLiteのでPostgresのデータ型を使用することはできません

id = db.Column('id', db.Text(length=36), default=lambda: str(uuid.uuid4()), primary_key=True) 
+0

私は今これだけを読んでいますが、それも起こったので、私も 'テキスト'列に頼っていました。しかし、これをありがとう。 – anobilisgorse

0

postgresqlデータベースを使用している場合にのみ、UUIDを使用できます。

関連する問題