使用 SQLAlchemy 检索具有英文表名的表的列列表是有效的:
table = Table('073_mappings', metadata, autoload=True, schema=schema_name)
connection = engine.connect()
columns = table.columns.keys()
print(columns)
当我使用带有俄语字符的表名时:
table = Table('073_Мэппинги', metadata, autoload=True, schema=schema_name)
它返回一个空列表。具有俄语名称的表确实存在于数据库中,我可以直接在 Exasol 中使用它。我尝试在连接字符串中设置各种编码:“utf8”、“utf8mb4”和“cp1251”。数据库支持俄语字符,因为我可以直接在 Exasol 中使用它。这种使用 SQLAlchemy 的查询也有效:
sql_statement = text(
"""
SELECT COLUMN_NAME
FROM EXA_ALL_COLUMNS
WHERE COLUMN_SCHEMA = :schema_name
AND COLUMN_TABLE = :table_name
"""
)
result = connection.execute(
sql_statement, schema_name=schema_name, table_name=table_name).fetchall()
如何在 Exasol 中检索具有俄语名称的表的列列表?我需要设置特定的编码或配置吗? 一些附加信息。 我使用 pyodbc 连接到 exasol DB,我的连接字符串如下所示:
engine = create_engine("exa+pyodbc://EXADB")
我使用 ODBC 驱动程序。 我通过这样的查询创建表(只是一个例子):
CREATE TABLE "AMS_TMP"."Таблица_1" (
"Первая_12" VARCHAR(12),
"Вторая_12" VARCHAR(12),
"Третья_12" VARCHAR(12),
"Четвертая_12" VARCHAR(12)
);
似乎适用于 ODBC 驱动程序版本 7.1.22。
from sqlalchemy import create_engine, Table, MetaData
url = "exa+pyodbc://sys:exasol@exasolution-uo2214lv2_64/test?CONNECTIONLCALL=en_US.UTF-8"
e = create_engine(url)
metadata_obj = MetaData(bind=None)
tab_name = 'some non-ASCII stuff'
table = Table(tab_name, metadata_obj, autoload_with=e, schema='test')
columns = table.columns.keys()
print(columns)