@101-s

Как Вы решили бы проблему апдейта двух баз с разными кодировками на Python?

Пишу скрипт для передачи данных из базы Access с кодировкой cp1251 в MySQL (utf8). Пишу на PyCharm, использую библиотеку pyodbc. Столкнулся с рядом проблем:
  • при ошибке PhyCharm выводит данные в консоли в юникоде pyodbc.Error: ('HY000', "[HY000] [Microsoft][\xc4\xf0\xe0\xe9\xe2\xe5\xf0 ODBC Microsoft Access] \xcd\xe5\xe2\xee\xe7\xec\xee\xe6\xed\xee \xe8\xf1\xef\xee\xeb\xfc. Что не есть гуд для понимания ошибок. Вроде бы прописал в настройках программы IDE Encoding, Project Encoding = windows-1251
  • второй затык состоит в том, что нужно преобразовывать данные, можно ли обойти как то эту процедуру?

Вот допустим такой код, из за которого программа выводит ошибки из-за спецсимволов, приходится составлять запросы Update для каждой строки обновляемой таблицы, преобразовывать символы в str, чтобы составить запрос...
# -*- coding: CP1251 -*-
import pyodbc

con = pyodbc.connect("DSN=test", autocommit=True)
cur=con.cursor()
row=cur.execute("SELECT * FROM tblSiteKos WHERE ProductsId=3455").fetchone()
row=list(row)
#пример строки из базы Access
drebeden=['3455', u'kre-721', u'kre-721.jpg', u'\u041c\u044f\u0433\u043a\u043e\u0435', u'', u'', '765', 0.1, '1', '510', '25', '1', '1', u'z.html']
newlist=[]
for i in row:
    if type(i)==int:newval=str(i)
    if type(i)==unicode:newval=i.encode("cp1251")
    else: newval=i
    newlist.append(newval)
print newlist
cur.close()
con.close()
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы