How to load a SQLite3 extension in SQLAlchemy?(如何在SQLAlChemy中加载SQLite3扩展?)
本文介绍了如何在SQLAlChemy中加载SQLite3扩展?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我构建了一个SQLite扩展名(即.so库),希望使用SQLAlChemy在我的应用程序中使用该扩展名。这是一个Flask应用程序,但我认为Flask在这里不起作用。
该扩展可以从CLI加载,并且似乎正常工作:
$ sqlite3
SQLite version 3.20.1 2017-08-24 16:21:36
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .load ./libSqliteIcu.so
但我需要在我的应用程序中执行此操作。Python文档中有一个示例:
import sqlite3
con = sqlite3.connect(":memory:")
# enable extension loading
con.enable_load_extension(True)
# Load the fulltext search extension
con.execute("select load_extension('./fts3.so')")
但在我的应用程序中,我必须使用db
访问数据库:
db = flask_sqlalchemy.SQLAlchemy()
我可以将最后一条语句重写为:
db.session.execute('select load_extension("./libsqliteicu.so")')
但失败,错误为"未授权"。
如何调用enable_load_extension()
或以其他方式成功加载扩展?
推荐答案
经过一番搜索和测试,基于各种来源,这个方法适合我。关于代码质量,我只能说这么多。我把它贴出来只是因为它可能会对某人有帮助。如果发现问题,请毫不犹豫地发表意见。
from sqlalchemy.event import listen
# initialization routine
# app: this Flask application
# db: the database, see the question
db_collate = 'sk_SK.UTF-8' # Slovak language for example
def load_extension(dbapi_conn, unused):
dbapi_conn.enable_load_extension(True)
dbapi_conn.load_extension('/path/to/libSqliteIcu.so')
dbapi_conn.enable_load_extension(False)
dbapi_conn.execute("SELECT icu_load_collation(?, 'ICU_EXT_1')", (db_collate,))
with app.app_context():
listen(db.engine, 'connect', load_extension)
和用法:
from sqlalchemy.sql.expression import collate
...query.order_by(collate(Table.column, 'ICU_EXT_1'))
名称ICU_EXT_1
完全任意。
这篇关于如何在SQLAlChemy中加载SQLite3扩展?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在SQLAlChemy中加载SQLite3扩展?


猜你喜欢
- 导入具有可变标题的 Excel 文件 2021-01-01
- SQL 临时表问题 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 更改自动增量起始编号? 2021-01-01
- 在SQL中,如何为每个组选择前2行 2021-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01