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

Вопросы связанные с работой ГИС Аксиома
Ответить
Аватара пользователя
Mitrich
Пользователь
Сообщения: 55
Зарегистрирован: 21 фев 2024, 14:45

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

Сообщение Mitrich » 31 май 2024, 12:04

День добрый, уважаемые разработчики!

Помогите пожалуйста разобраться с настройкой кодировки при использовании 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%'") получаю данные по запросу.

Заранее спасибо.
Аватара пользователя
Александр
Администратор
Сообщения: 621
Зарегистрирован: 18 апр 2019, 11:21

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()
Аватара пользователя
Mitrich
Пользователь
Сообщения: 55
Зарегистрирован: 21 фев 2024, 14:45

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

Сообщение Mitrich » 03 июн 2024, 10:42

Огромное спасибо!
Все заработало.
Ответить