pyODBC и Unicode



Я работаю с pyODBC communicate с сервером MS SQL 2005 Express.
Таблица, в которую я пытаюсь сохранить данные, состоит из столбцов nvarchar.



query = u"INSERT INTO tblPersons (name, birthday, gender) VALUES('"
query = query + name + u"', '"
query = query + birthday + u"', '"
query = query + gender + u"')"
cur.execute(query)


Переменные name, birthrday и gende считываются из файла Excel и являются строками Юникода.
Когда я выполняю запрос и либо смотрю на таблицу с помощью SQL Server Management Studio, либо выполняю запрос, который извлекает только что вставленные данные, все данные, написанные на неанглийских языках, превращаются в вопросительный знак. Данные, написанные на английском языке, сохраняются и отображаются в таблице в правильном виде.
Я попытался добавить CHARSET=UTF16 в строку подключения, но мне это не удалось.
Я могу использовать UTF-8, который отлично работает, но в качестве рабочей конвенции мне нужно, чтобы все данные, сохраненные в моей БД, были UTF16.



Спасибо!

618   2  

2 ответов:

Это может быть что-то связанное с драйвером odbc, который использует pyodbc. Если это не поддерживает unicode, вам, вероятно, придется кодировать парамы самостоятельно, например name.encode('utf-16')

Кроме того, вы должны действительно, действительно использовать параметры запроса, а не объединять строку sql самостоятельно, например:

query = "INSERT INTO tblPersons (name, birthday, gender) VALUES (?, ?, ?)"
cur.execute(query, [name, birthday, gender])
Я сомневаюсь, что это поможет с вашей проблемой unicode, но это намного безопаснее и проще.

(и еще один несвязанный совет: использование pyodbc через sqlalchemy намного приятнее, даже если вы используете его только для простых запросов и не используете объектно-реляционное отображение)

Я такая глупая.. Проблема была с сервером (пришлось изменить мои параметры сортировки на нужный мне язык)

Спасибо!

Comments

    Ничего не найдено.