pyODBC и Unicode - PullRequest
       29

pyODBC и Unicode

2 голосов
/ 10 июня 2010

Я работаю с pyODBC для связи с сервером 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)

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

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

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

query = "INSERT INTO tblPersons (name, birthday, gender) VALUES (?, ?, ?)"
cur.execute(query, [name, birthday, gender])

Я сомневаюсь, что это поможет с вашей проблемой с юникодом, но это намного безопаснее и проще.

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

0 голосов
/ 12 июня 2010

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

Спасибо!

...