因此,我有一个包含购买记录的数据库,每条记录都有很多列,包括购买者的id和他们的名字。如果我想为客户创建一个新表,我这样做:
Purchasedf = pd.read_csv('Purchase.csv')
conn = sqlite3.connect('Purchase.db')
cursor = conn.cursor()
#The Client table
cursor.execute('''
CREATE TABLE IF NOT EXISTS Client (
CustomerID INTEGER PRIMARY KEY UNIQUE,
CustomerName TEXT,
CustomerEmail TEXT,
CustomerPhone TEXT
);
''')
Purchasedf.to_sql("Client", conn, if_exists='replace')
cursor.execute('''
SELECT CustomerID
FROM Client
''')
display(cursor.fetchall())
conn.commit()
字符串
所以我的csv文件看起来像这样:第一行:采购ID,客户ID,客户名称,客户电子邮件,客户电话,产品ID,采购日期
第二排:1,6145,Ethan Smith,email protected(https://stackoverflow.com/cdn-cgi/l/email-protection),555 - 087834,8513,2024 -10-07 16:33:28.557244
现在,如果我尝试从客户端选择CustomerID,我会得到重复的ID。我如何使它们不同?我的意思是我知道我可以选择它们不同,但(PRIMARY KEY)关键字不应该使实际的表与ID不同吗?
1条答案
按热度按时间tvz2xvvm1#
客户端表在上一次运行中已存在,并且其CustomerID不唯一。
因为您正在运行
create table if not exists
,并且没有删除表,所以第一次运行代码将创建一个表,该表可能没有主键。随后的运行将忽略您的
create table
,因为它已经存在,并重用现有的表。它不会更改架构。现在,每次运行代码时,都会插入重复的代码。
你可以通过在SQLite shell中运行
.schema Client
来检查。这类问题在生产代码中使用schema migration工具处理。