咱们终于要动手准备表格,来批量导入CSV文件里的数据啦。如果你在想:“为啥还要专门准备表?这有啥难的?”,那你还真得多了解下真实世界。没有哪个文件是“完美”的。总会有点小坑——比如重复、乱七八糟的空格、数据类型错了,或者结构根本对不上。
来看看怎么把数据库准备好,让CSV文件能顺利导入,不出幺蛾子。
在导入CSV文件之前,先想清楚数据要怎么存到库里。也就是说,得先建个结构合适的表。
例子:导入学生信息
假设我们有个CSV文件students.csv,里面是学生的信息。内容大概这样:
id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics
基于这个文件,来建个表:
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- 学生唯一标识
name VARCHAR(100) NOT NULL, -- 学生姓名(最多100个字符)
age INT CHECK (age > 0), -- 学生年龄(必须大于0)
email VARCHAR(100) UNIQUE, -- 唯一email
major VARCHAR(100) -- 主修专业
);
id SERIAL PRIMARY KEY:我们加了主键,保证每行唯一。如果你的CSV里已经有唯一id,就用文件里的id列。name VARCHAR(100) NOT NULL:学生名字必须有,长度最多100。age INT CHECK (age > 0):年龄得是数字,还得大于0。email VARCHAR(100) UNIQUE:email要唯一,避免重复。major VARCHAR(100):学生主修专业,这里没啥限制。
你的表结构要设计得合理,既能装下你的数据,又能防止乱七八糟的数据混进来。这样导入的时候,出错的概率就小多了。
导入前的数据检查
CSV文件经常会有惊喜。在导入之前,先确认下数据和表结构对得上。
怎么检查数据?
列数匹配
确认CSV里的列数和表结构一致。比如表里有5列,CSV有6列,导入肯定报错。数据类型
检查每列的数据类型对不对。比如age这一列,必须全是整数。
验证工具
Excel或者Google Sheets。用表格工具打开文件,看看有没有空行或者奇怪的数据。
Python。用pandas库来检查数据类型:
import pandas as pd
# 读取CSV
df = pd.read_csv('students.csv')
# 检查数据
print(df.dtypes) # 打印每列数据类型
print(df.isnull().sum()) # 检查空值数量
导入前的数据清洗
外部数据通常都得清洗下。不然导入的时候,分分钟出错。
CSV文件常见问题
空行或空列
如果某行缺了必填列(NOT NULL),就会报错。
错误数据例子:
id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics
解决办法:把空值换成允许的值。比如age空了,就填NULL。
多余的空格
行首行尾的空格会出问题。比如"Alex"和"Alex",数据库会当成不一样。
Python解决:去掉多余空格。
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
非法字符或编码问题
文件里有些特殊字符,数据库不认,导入就会失败。
例子:用iconv工具转编码:
iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv
数据清洗:Python例子
import pandas as pd
# 读取文件
df = pd.read_csv('students.csv')
# 清洗数据
df['name'] = df['name'].str.strip() # 去掉空格
df['email'] = df['email'].str.lower() # email转小写
df['age'] = df['age'].fillna(0) # 年龄空值填0
df['age'] = df['age'].astype(int) # 年龄转整数
# 保存到新文件
df.to_csv('cleaned_students.csv', index=False)
导入前一定要检查数据。记住:好程序员都提前抓bug,省自己时间!
表结构和数据准备小清单
开始搞CSV之前,先确认:
- 表结构和数据匹配(列、数据类型、约束都对)。
- CSV文件没有空行、多余空格或非法字符。
- 文件编码和PostgreSQL兼容(最好用UTF-8)。
- 你用上了数据分析和清洗工具(比如Python、Excel)。
现在你已经可以导入CSV数据啦!不过在动手之前,记得再检查下表结构和数据清洗没问题。下节课我们继续聊怎么把数据导入PostgreSQL,包括错误处理和冲突解决。
GO TO FULL VERSION