Sam*_*Sam 0 csv postgresql sqlalchemy
我想导入一个大的 csv 文件,而不需要先将该 csv 文件创建表到 postgresql 中。在 stackoverflow 上搜索时,一位用户建议使用以下代码:
from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')
df.to_sql('table_name', engine)
Run Code Online (Sandbox Code Playgroud)
基于此,我根据我的 postgresql 的信息编写了以下代码,其中用户名 =“postgres”,密码 =“Katherine@412”:
from sqlalchemy import create_engine
engine = create_engine('postgresql://[postgres]:Katherine@412@postgres:5432/covid_deaths.csv')
df.to_sql('covid_deaths_owid', engine)
Run Code Online (Sandbox Code Playgroud)
但是它给了我以下错误:
OperationalError: (psycopg2.OperationalError) could not translate host name "412@postgres" to address: Unknown server error
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我做错了什么吗?
问题是连接字符串中的密码包含“at”符号@。这被解释为标记密码的结尾和主机名的开头。
快速解决方案是将第一个@符号替换为%40。连接字符串是一种 URI,%40是 的 URI 编码@(在处理密码时会转换为正确的符号)。
一般来说,您可以在 Python 中以 URI 安全的方式对任何字符串进行编码,如下所示:
import urllib.parse
encoded = urllib.parse.quote_plus(unencoded)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,您的用户名周围也有方括号,这也可能在您解决第一个问题后引起问题。