随机生成一个列表,每个元素都是一个四个字段的字典,四个字段分别为:姓名、年龄、爱好、身高,其中姓名和爱好为中文,将这个列表数据用效率最高的方式插入到duckdb,表名命名为test,最后通过查询验证数据已导入成功,要求中文查询后能正确显示
首先,为了随机生成一个包含姓名、年龄、爱好和身高的字典列表,我们可以使用Python的random
和string
库。然后,使用DuckDB的连接API将其高效地插入到数据库中,并创建名为test
的表。以下是步骤:
```python import random import string from duckdb import connect
创建随机字典列表
def generate_random_data(num_items): def generate_random_string(length=4): return ''.join(random.choices(string.ascii_letters + ' ', k=length))
data = []
for _ in range(num_items):
name = generate_random_string() + "先生" if random.random() > 0.5 else generate_random_string() + "女士"
age = random.randint(18, 60)
hobby = generate_random_string()
height = round(random.uniform(150, 200), 2) # 假设单位是厘米
dict_data = {"姓名": name, "年龄": age, "爱好": hobby, "身高": height}
data.append(dict_data)
return data
连接到DuckDB
conn = connect("sqlite:///my_duckdb.db") # 如果是SQLite数据库,不需要URL cursor = conn.cursor()
创建表
cursor.execute(""" CREATE TABLE IF NOT EXISTS test ( id INTEGER PRIMARY KEY, 姓名 TEXT, 年龄 INTEGER, 爱好 TEXT, 身高 REAL ); """)
插入数据
data_list = generate_random_data(10) # 可以调整数量 insert_query = "INSERT INTO test VALUES (?, ?, ?, ?, ?)" cursor.executemany(insert_query, [(i+1, d["姓名"], d["年龄"], d["爱好"], d["身高"]) for i, d in enumerate(data_list)])
提交事务并关闭连接
conn.commit() conn.close()
查询验证数据
cursor.execute("SELECT * FROM test WHERE 姓名 LIKE '%先生%'") rows = cursor.fetchall() if rows: print(f"数据已成功导入,部分查询结果如下:") for row in rows: print(row) else: print("查询未找到数据,可能是中文字符处理有问题。检查是否支持中文搜索。")