1. Faker 简介
Faker 是一个 Python 库,用于生成各种类型的虚假数据,非常适合测试、开发和演示。本教程将展示如何使用 Faker 生成中文测试数据,并将其插入到 PostgreSQL 数据库中。
2. 环境准备
首先确保已安装必要的库:
pip install faker psycopg2
3. 基础代码解析
3.1 初始化 Faker 并设置中文
from faker import Faker
faker = Faker("zh-CN") # 设置为中文环境
3.2 创建 PostgreSQL 数据库表
import psycopg2
sql1 = '''
create table if not exists faker(
id serial primary key,
name varchar(200),
password varchar(100),
ssn char(18),
phone_number char(11),
email varchar(100),
company varchar(200),
job varchar(200),
province varchar(100),
address varchar(200),
sentence text
)
'''
3.3 数据库连接配置
connect_str = "host=127.0.0.1 port=5432 dbname=postgres user=postgres password=123456 client_encoding='UTF8'"
conn = psycopg2.connect(connect_str)
c = conn.cursor()
c.execute(sql1)
4. 使用 Faker 生成测试数据
4.1 生成单个数据记录
dics = {
'name': faker.name(), # 中文姓名
'password': faker.password(special_chars=False), # 密码
'ssn': faker.ssn(), # 身份证号
'phone_number': faker.phone_number(), # 手机号
'email': faker.email(), # 电子邮箱
'company': faker.company(), # 公司名称
'job': faker.job(), # 职位
'province': faker.province(), # 省份
'address': faker.address(), # 详细地址
'sentence': faker.sentence(), # 随机句子
}
4.2 批量生成数据
lsts = []
for i in range(100): # 生成100条记录
dics = {
'name': faker.name(),
'password': faker.password(special_chars=False),
'ssn': faker.ssn(),
'phone_number': faker.phone_number(),
'email': faker.email(),
'company': faker.company(),
'job': faker.job(),
'province': faker.province(),
'address': faker.address(),
'sentence': faker.sentence(),
}
lsts.append(dics)
5. 插入数据到 PostgreSQL
5.1 准备 SQL 语句
columns = ','.join(dics.keys()) # 获取所有列名
qmarks = ','.join(['%s'] * len(dics)) # 创建占位符
sql2 = f'insert into faker({columns}) values({qmarks})' # 完整的插入语句
5.2 转换数据格式并执行
values = [tuple(dics.values()) for dics in lsts] # 将字典列表转换为元组列表
c.executemany(sql2, values) # 批量执行
5.3 提交事务并关闭连接
conn.commit() # 提交事务
conn.close() # 关闭连接
6. 完整代码示例
from faker import Faker
import psycopg2
# 初始化Faker,设置为中文
faker = Faker("zh-CN")
# 创建表SQL
sql1 = '''
create table if not exists faker(
id serial primary key,
name varchar(200),
password varchar(100),
ssn char(18),
phone_number char(11),
email varchar(100),
company varchar(200),
job varchar(200),
province varchar(100),
address varchar(200),
sentence text
)
'''
# 连接PostgreSQL
connect_str = "host=127.0.0.1 port=5432 dbname=postgres user=postgres password=123456 client_encoding='UTF8'"
conn = psycopg2.connect(connect_str)
c = conn.cursor()
c.execute(sql1)
# 生成100条测试数据
lsts = []
for i in range(100):
dics = {
'name': faker.name(),
'password': faker.password(special_chars=False),
'ssn': faker.ssn(),
'phone_number': faker.phone_number(),
'email': faker.email(),
'company': faker.company(),
'job': faker.job(),
'province': faker.province(),
'address': faker.address(),
'sentence': faker.sentence(),
}
lsts.append(dics)
# 准备插入语句
columns = ','.join(dics.keys())
qmarks = ','.join(['%s'] * len(dics))
sql2 = f'insert into faker({columns}) values({qmarks})'
# 转换数据格式并执行
values = [tuple(dics.values()) for dics in lsts]
c.executemany(sql2, values)
# 提交并关闭连接
conn.commit()
conn.close()
print("成功插入100条测试数据!")
7. 效果查看

8. 常见问题解决
- 中文乱码问题:
- 确保数据库连接字符串中包含
client_encoding='UTF8' - 确认数据库和表的编码设置为UTF-8
- 确保数据库连接字符串中包含
- 数据类型不匹配:
- 检查生成的假数据是否符合表定义的数据类型
- 例如身份证号应为18位,手机号应为11位
- 连接问题:
- 确认PostgreSQL服务正在运行
- 检查连接参数是否正确(主机、端口、用户名、密码)
- 性能优化:
- 对于大量数据插入,考虑使用
COPY命令代替多次INSERT - 可以分批提交,比如每1000条提交一次
- 对于大量数据插入,考虑使用
9. 扩展应用
-
自定义数据生成器:
from faker.providers import BaseProvider class MyProvider(BaseProvider): def custom_ssn(self): return '110101' + self.numerify('##########') faker.add_provider(MyProvider) -
其他语言环境:
# 英文数据 faker_en = Faker("en-US") # 日文数据 faker_jp = Faker("ja_JP") -
更多Faker方法:
faker.date_of_birth()- 出生日期faker.credit_card_full()- 信用卡信息faker.file_name()- 文件名faker.user_agent()- 浏览器User-Agent
通过本教程,您应该已经掌握了使用Faker生成测试数据并插入PostgreSQL数据库的基本方法。这对于开发测试、数据分析和演示都非常有用。关注以下公众号,获取最新PG帖子。

浙公网安备 33010602011771号