2016-04-23 11 views
1

ich diesen Code-Snippet von Flask-common in Zeile 57 gesehen:kann nicht Element des Typs machen <Klasse 'sqlalchemy.dialects.postgresql.base.UUID>

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

Also dachte ich, ich gebe es ein versuchen, und verwenden sie es in meiner App models.py (weil ich lieber uuid Typ für meine ids haben)

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) 

Aber wenn ich versuche python manage.py db upgrade zu laufen, kommt es zu einem Fehler:

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'> 

Warum kann es den Typ UUID nicht rendern? Es ist in SQLAlchemy erkannt, aber wie kommt es kann nicht in Flask-SQLAlchemy?

+3

Sie keine Postgres-Datentyp mit SQLite verwenden können. Sie sind zwei verschiedene Datenbanken. – dirn

Antwort

1

Ihre Spaltendefinition verwendet eine Funktion, die nur mit postgresql funktioniert, und Ihr Datenbanktyp ist sqlite.

Sie müssen dies:

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

Ich lese das erst jetzt, aber es ist auch passiert, dass ich auch auf eine 'Text'-Spalte zurückgegriffen habe. Danke dafür. – anobilisgorse

0

Sie können UUID nur verwenden, wenn Sie postgresql Datenbank verwenden.

Verwandte Themen