如何指示SQLAlchemy在create_all()上创建SQLite FTS3表?
发布时间:2020-12-12 19:05:48 所属栏目:百科 来源:网络整理
导读:我希望SQLAlchemy在.create_all()期间创建一个FTS3表.我需要添加哪些特殊选项才能知道创建虚拟表…使用FTS3(tokenizer = …)? 据我所知要实现这个futer你必须改进sqlite方言来改变create_table行为. 但你可以使用这个快速但丑陋的解决方案“monkeypatching
我希望SQLAlchemy在.create_all()期间创建一个FTS3表.我需要添加哪些特殊选项才能知道创建虚拟表…使用FTS3(tokenizer = …)?
据我所知要实现这个futer你必须改进sqlite方言来改变create_table行为.
但你可以使用这个快速但丑陋的解决方案“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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |