2010-10-12 10 views

Respuesta

3

Como sé que para implementar este futer, debe mejorar el dialecto sqlite para cambiar el comportamiento de create_table.

Pero puede utilizar esta solución rápida, pero feo, con "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() 
Cuestiones relacionadas