Pandas 带有希腊字符的数据框到 postgresql

Pandas dataframe with Greek characters to postgresql

我正在处理以下内容: Python 3.9.2 Pandas1.3.4 PostgreSQL 14.1

我创建了一个示例数据框来探索 pandas 和 postgresql。

d = {'col1': ['Αθήνα', 'χαρύϊψχορες'], 'col2': ['Θεσσαλονίκη', 'Ξπφδ']}
df = pd.DataFrame(data=d)

当我调用 df 时在 Jypiter 上工作,我得到以下输出:

    col1    col2
0   Αθήνα   Θεσσαλονίκη
1   χαρύϊψχορες Ξπφδ

然后,我尝试使用以下代码将数据添加到 psql:

engine = create_engine('postgresql://user:password@localhost:port/test_db', encoding='utf-8-sig')
df.to_sql('sq_exp', engine)

如果我打开我的 CMD 到 select 数据,我得到这个错误:

test_db=# select * from sq_exp;
ERROR:  character with byte sequence 0xce 0x91 in encoding "UTF8" has no equivalent in encoding "WIN1252"

在尝试修复此错误时,我将编码设置为 win1252 却得到了同样的错误:

test_db=# SET client_encoding TO 'WIN1252';
SET
test_db=# select * from sq_exp;
ERROR:  character with byte sequence 0xce 0x91 in encoding "UTF8" has no equivalent in encoding "WIN1252"

根据postgres的文档,我将编码设置为WIN1253 https://www.postgresql.org/docs/current/multibyte.html

当我 select 数据:select * from sq_exp; 我得到以下输出:

test_db=# select * from sq_exp;
 index |    col1     |    col2
-------+-------------+-------------
     0 | ┴Φ▐φß       | ╚σ≤≤ßδ∩φ▀Ωτ
     1 | ≈ß±²·°≈∩±σ≥ | ╬≡÷Σ

如您所见,这与最初创建的 df 完全不同,我尝试了多种方法来解决它。请有人指导我如何做?

非常感谢! [1]: https://i.stack.imgur.com/kkK3R.png [2]: https://i.stack.imgur.com/49rAe.png [3]: https://i.stack.imgur.com/8wIoq.png [4]: https://i.stack.imgur.com/IsHVM.png

其实我已经发现了这个问题

好像是CMD不支持希腊字符,所以才报错:

ERROR:  character with byte sequence 0xce 0x91 in encoding "UTF8" has no equivalent in encoding "WIN1252"

解决方法实际上是通过代码编辑器或数据库管理工具查看数据。

这是一个使用 Visual Studio 代码的示例:

import psycopg2
conn_string = "host='localhost' dbname='database_name' user='postgres' password='password'"
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
cursor.execute("SELECT * FROM sq_exp")
records = cursor.fetchall()

运行 以上实际上会打印出预期的输出:

[(0, 'Αθήνα', 'Θεσσαλονίκη'), (1, 'χαρύϊψχορες', 'Ξπφδ')]

同样适用于使用数据库应用程序工具