День добрый, уважаемые разработчики!
Помогите пожалуйста разобраться с настройкой кодировки при использовании 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%'") получаю данные по запросу.
Заранее спасибо.
Не работают запросы к базе MSSQL Server из AstraLinux c русскими символами при использовании драйверов Axioma
Re: Не работают запросы к базе MSSQL Server из AstraLinux c русскими символами при использовании драйверов Axioma
А если использовать драйвер ODBC для SQL Server от Microsoft?
https://learn.microsoft.com/ru-ru/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver16#download-for-linux-and-macos
https://learn.microsoft.com/ru-ru/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver16#download-for-linux-and-macos
Re: Не работают запросы к базе MSSQL Server из AstraLinux c русскими символами при использовании драйверов Axioma
Попробуйте указать кодировку 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
Огромное спасибо!
Все заработало.
Все заработало.