我有一个脚本,它从一个数据库中获取数据,并根据表的名称和字段将其复制到另一个数据库中。
问题是关于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中的结果:
postgresql - psycopg2不插入Unicode数据-LMLPHP
我还尝试用unicode设置extensions和插入数据,但在本例中有一个错误
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...
                                                            ^

这里该怎么办?

最佳答案

不要使用烘焙的值(使用字符串格式或连接)准备字符串。
相反,将值作为参数传递给.execute方法。
例如。

sql = 'INSERT INTO {} ({})  VALUES (%s, %s, %s);'.format('"tb_names"', '"num", "name", "district"')
cur_2.execute(sql, (23, u'Рынок', u'Волжский'))

关于postgresql - psycopg2不插入Unicode数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53375955/

10-09 17:53
查看更多