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.
Спасибо!
2 ответов:
Это может быть что-то связанное с драйвером odbc, который использует pyodbc. Если это не поддерживает unicode, вам, вероятно, придется кодировать парамы самостоятельно, например
name.encode('utf-16')Кроме того, вы должны действительно, действительно использовать параметры запроса, а не объединять строку sql самостоятельно, например:
Я сомневаюсь, что это поможет с вашей проблемой unicode, но это намного безопаснее и проще.query = "INSERT INTO tblPersons (name, birthday, gender) VALUES (?, ?, ?)" cur.execute(query, [name, birthday, gender])(и еще один несвязанный совет: использование pyodbc через sqlalchemy намного приятнее, даже если вы используете его только для простых запросов и не используете объектно-реляционное отображение)
Я такая глупая.. Проблема была с сервером (пришлось изменить мои параметры сортировки на нужный мне язык)
Спасибо!
Comments