Страница 1 из 1

Не работают запросы к базе MSSQL Server из AstraLinux c русскими символами при использовании драйверов Axioma

Добавлено: 31 май 2024, 12:04
Mitrich
День добрый, уважаемые разработчики!

Помогите пожалуйста разобраться с настройкой кодировки при использовании PYODBC при работе с базой данных MS SQL Server(Windows) из под Astra Linux
При использовании pyodbc c драйверами из Axioma я не могу получить записи из таблицы, если в запросе присутствуют русские символы.

Я использую скрипт:

conn_string = 'Driver=/opt/axioma-gis5/bin/libtdsodbc.so;Server={0};Database={1};UID={2};PWD={3};'.format(...)
schema = 'dbo'
database = pyodbc.connect(conn_string)
cursor = database.cursor()
print('Загрузка справочников...')
try:
s = ("SELECT TOP(10) classid as id, additional_info as name FROM {}.FunctionalZone ".format(schema) +
" WHERE additional_info like 'ТИ1-1%'")

cursor.execute(s)
records = cursor.fetchall()
print(records)
except:
print('Ошибка загрузки справочника FunctionalZone')

записи из таблицы при этом не возвращаются, хотя в базе данный все присутствует.

При использовании условия " WHERE additional_info like '%1-1%'") получаю данные по запросу.

Заранее спасибо.

Re: Не работают запросы к базе MSSQL Server из AstraLinux c русскими символами при использовании драйверов Axioma

Добавлено: 31 май 2024, 20:20
Александр

Re: Не работают запросы к базе MSSQL Server из AstraLinux c русскими символами при использовании драйверов Axioma

Добавлено: 02 июн 2024, 13:39
Александр
Попробуйте указать кодировку UTF-8 с помощью Connection.setencoding

Code: Select all

schema = 'dbo'

SERVER = '<server-address>'
DATABASE = '<database-name>'
USERNAME = '<username>'
PASSWORD = '<password>'

connectionString = f'Driver=/opt/axioma-gis5/bin/libtdsodbc.so;\
SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'

conn = pyodbc.connect(connectionString)
conn.setencoding(encoding='utf-8')

SQL_QUERY = f"""
SELECT TOP(10) classid as id, additional_info as name
FROM {schema}.FunctionalZone
WHERE additional_info like 'ТИ1-1%'
"""

cursor = conn.cursor()
cursor.execute(SQL_QUERY)

records = cursor.fetchall()

Re: Не работают запросы к базе MSSQL Server из AstraLinux c русскими символами при использовании драйверов Axioma

Добавлено: 03 июн 2024, 10:42
Mitrich
Огромное спасибо!
Все заработало.