gpt4 book ai didi

python-3.x - 将编码参数从sqlalchemy传递给cx_oracle

转载 作者:行者123 更新时间:2023-12-01 04:44:21 24 4
gpt4 key购买 nike

我正在使用带有UTF-16编码的Oracle数据库。直接使用cx_oracle客户端时,变音符号正确显示。连接语句是这样的:

cx_Oracle.connect(username, password, conn_str, encoding='UTF-16', nencoding='UTF-16')

但是,现在我正在构建更大的应用程序,并且我想在 SQLalchemy中使用 Flask

代码如下:
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy(app)
db.Model.metadata.reflect(db.engine)

class MyTable(db.Model):
__table__ = db.Model.metadata.tables['mytable']

for row in MyTable.query:
print(row.column_with_diacritics)

上面代码的输出: aoe但是数据库中的列值是: áóé
所以我的问题是,如何将 encoding='UTF-16', nencoding='UTF-16'参数传递给sqlalchemy使用底层函数的cx_oracle?

感谢您的任何建议或其他解决方法。

最佳答案

SQLAlchemy create_engine允许您通过connect()connect_args参数将其他参数传递给基础cx_Oracle的create_engine:

import cx_Oracle
e = create_engine(
"oracle+cx_oracle://user:pass@connstr...",
connect_args={
"encoding": "UTF-16",
"nencoding": "UTF-16"
}
)

设置 NLS_LANG实际上对我不起作用,但是我认为这是因为我在Cygwin中并且还有其他一些怪癖(例如,我实际上想动态设置编码,即使我确实设法获得了cx_Oracle,也必须重新加载它) NLS_LANG上类)。使用这种方法对我有用。

来源:(SQLAlchemy Oracle方言源代码):
https://github.com/zzzeek/sqlalchemy/blob/560452acd292c8a9a57db032378a6342f16448c6/lib/sqlalchemy/dialects/oracle/cx_oracle.py#L37

关于python-3.x - 将编码参数从sqlalchemy传递给cx_oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com