2010-10-12 14 views

cevap

3

Bu dili uyguladığımı bildiğim gibi, create_table davranışını değiştirmek için sqlite dialect'i geliştirmelisiniz.

Ama "monkeypatching"

# ugly monkeypatch 
from sqlalchemy.dialects.sqlite.base import SQLiteDDLCompiler 

old_create_table = SQLiteDDLCompiler.visit_create_table 

def new_create_table(*args, **kwargs): 
    sql = old_create_table(*args, **kwargs) 
    # TODO 
    # 1) check table with FTS3 
    # 2) change sql to CREATE VIRTUAL TABLE ... USING FTS3(tokenizer=...) 
    print 'SQL: %s' % sql 
    return sql 

SQLiteDDLCompiler.visit_create_table = new_create_table 
# end of ugly monkey patch 

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy import schema, MetaData, Column, Integer 

metadata = MetaData() 
Base = declarative_base(metadata=metadata) 

class MyModel(Base): 
    __tablename__ = 'table' 
    id = Column(Integer, primary_key=True) 

if __name__ == '__main__': 
    from sqlalchemy import create_engine 
    engine = create_engine('sqlite:///', echo=True) 
    metadata.bind = engine 
    metadata.create_all() 
ile bu hızlı, ama çirkin çözümü kullanabilirsiniz