所以我有一个包含购买记录的数据库,每条记录都有很多列,包括购买者的 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,[电子邮件受保护],555-087834,8513,2024-10-07 16:33:28.557244
现在,如果我尝试从客户端选择 CustomerID,我会收到重复的 ID。 我怎样才能使它们与众不同?我的意思是我知道我可以明确地选择它们,但是 (PRIMARY KEY) 关键字不应该使实际的表与 ID 不同吗?
Client 表在上次运行中已存在,并且其 CustomerID 不唯一。
因为您正在运行
create table if not exists
,并且您没有删除该表,所以第一次运行代码将创建一个表。该表大概没有主键。
后续运行将忽略您的
create table
并重用现有表。它不会改变架构。
现在每次运行代码时,都会插入重复项。
您可以通过在 SQLite shell 中运行
.schema Client
进行检查。