加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何指示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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读