随机生成一个列表,每个元素都是一个四个字段的字典,四个字段分别为:姓名、年龄、爱好、身高,其中姓名和爱好为中文,将这个列表数据用效率最高的方式插入到duckdb,表名命名为test,最后通过查询验证数据已导入成功,要求中文查询后能正确显示
时间: 2024-09-15 11:14:06 浏览: 60
首先,为了随机生成一个包含姓名、年龄、爱好和身高的字典列表,我们可以使用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("查询未找到数据,可能是中文字符处理有问题。检查是否支持中文搜索。")
阅读全文