使用Python将CSV文件导入PostgreSQL数据库

前言

遇到了一个需求,需要将给定的样表导入数据库中。这有什么,直接SQL!然后一看个属性,傻眼了。

想点办法

当然,这个时候就得请出我们无所不能的数据处理器:pandas

1
my_data = pandas.read_csv('my_data.csv')

没啥问题。

然后呢?我们的pandas给了一个to_sql方法,直接导入数据库。

1
my_data.to_sql('my_table', conn, if_exists='append', index=False)

也没啥问题。执行!

遇到问题

报错无法解析conn。而且报错内容很诡异,说是在AND name=?;这个地方出现了SQLError

但是我只有to_sql,也没有编写SQL,更没有用execute执行啊。

解决问题

于是注意到,conn需要使用sqlalchemy来创建,这是PostgreSQL的官方提示。

那就试试看:

先安装:

1
pip install sqlalchemy

然后写脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from sqlalchemy import create_engine

# 替换下面的参数为你自己的数据库信息
username = ${username}
password = ${password}
host = ${host}
port = ${port}
database = ${database}

# 创建连接字符串
connection_string = f'postgresql://{username}:{password}@{host}:{port}/{database}'

# 创建数据库引擎
engine = create_engine(connection_string)

import pandas as pd

# 获取数据,读取当前目录下的CSV文件
df = pd.read_csv('your_data.csv')

# 使用pandas的to_sql函数把数据导入到postgreSQL数据库中,并指定表名为your_table_name
df.to_sql('your_table_name', con=engine, index=False, if_exists='replace')

这样就好了。

需要注意的是,这样的方法并不需要你创建对应的表,直接就能够导入。非常的方便。