无法检索带有俄语符号的表的列列表

问题描述 投票:0回答:1

使用 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)
);
python sqlalchemy pyodbc exasol
1个回答
0
投票

似乎适用于 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)
© www.soinside.com 2019 - 2024. All rights reserved.