在sqlite3中创建表时指定列会自动使其不同吗?

问题描述 投票:0回答:1

所以我有一个包含购买记录的数据库,每条记录都有很多列,包括购买者的 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 不同吗?

python sql database sqlite
1个回答
0
投票

Client 表在上次运行中已存在,并且其 CustomerID 不唯一。


因为您正在运行

create table if not exists
,并且您没有删除该表,所以第一次运行代码将创建一个表。该表大概没有主键。

后续运行将忽略您的

create table
并重用现有表。它不会改变架构。

现在每次运行代码时,都会插入重复项。

您可以通过在 SQLite shell 中运行

.schema Client
进行检查。

© www.soinside.com 2019 - 2024. All rights reserved.