psycopg2 не вставляет данные Unicode
У меня есть скрипт, который берет данные из одной базы данных и в соответствии с именами таблиц и полей копирует их в другую базу данных. Вопрос касается данных Unicode, мне нужно вставить несколько слов на русском языке, но каждый раз, когда psycopg2 пишет их, как если бы это была строка по умолчанию.
import psycopg2
import psycopg2.extensions
conn_two = psycopg2.connect(user="postgres", password="password", host = "localhost", port= "5432", dbname = "base2")
cur_2 = conn_two.cursor()
sql = 'INSERT INTO {} ({}) VALUES {};'.format('"tb_names"', '"num", "name", "district"', (23, 'Рынок', 'Волжский'))
cur_2.execute(sql)
conn_two.commit()
Вот как выглядит результат в pgAdmin4:
Я также пытался установить расширения и вставить данные в Unicode, но в этом случае у меня ошибка
import psycopg2
import psycopg2.extensions
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
conn_two = psycopg2.connect(user="postgres", password="password", host = "localhost", port= "5432", dbname = "base2")
conn_two.set_client_encoding("utf-8")
conn_two.set_client_encoding('UNICODE')
cur_2 = conn_two.cursor()
sql = 'INSERT INTO {} ({}) VALUES {};'.format('"tb_names"', '"num", "name", "district"', (23, u'Рынок', u'Волжский'))
cur_2.execute(sql)
conn_two.commit()
Traceback (most recent call last):
File "D:\_Scripts\pgadmin.py", line <>, in <module>
cur_2.execute(sql)
psycopg2.ProgrammingError: ОШИБКА: тип "u" не существует # - says that type "u" does not exist
LINE 1: ...ing_ex" ("num", "name", "district") VALUES (23, u'\u0420\u...
^
Что здесь нужно сделать?
1 ответ
Решение
Не готовьте свою строку со значениями, запеченными в (используя форматирование строки или конкатенацию).
Вместо этого передайте свои значения .execute
метод в качестве аргумента.
Например
sql = 'INSERT INTO {} ({}) VALUES (%s, %s, %s);'.format('"tb_names"', '"num", "name", "district"')
cur_2.execute(sql, (23, u'Рынок', u'Волжский'))