SQLite3:Python输入到表的自动递增问题

2024-05-23 15:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我当前在将数据导入sqlite3表时遇到问题。 在我的测试程序中,当被要求输入时,用户输入他们的假冒信息。 然后,我把这个输入放在我的表中,但是,我遇到了一个关于自动递增的“用户ID”的问题。每个用户都有自己的ID,到目前为止有5个用户。当一个新用户输入他们的数据时,我如何使它自动将“UserID”设置为下一个数字,在本例中是6。

如果我在第一个值(在下面的代码中)中手动输入“6”,一切都会正常工作,但是我如何使其自动?

conn = sqlite3.connect('xxxxxxx.db')
c=conn.cursor()
NameCreate = input("Please enter your First and Last name: ")
UserNameCreate = input("Please enter your desired User Name: ")
PasswordCreate = input("Please enter your desired Password: ")
DOBCreate = input("Please enter your date of birth [DD.MM.YYYY]: ")
FavouriteArtistCreate = input("Please enter your favourite Arist: ")
FavouriteGenreCreate = input("Please enter your favourite Genre: ")

c.execute("INSERT INTO Users VALUES (AUTOINCREMENT, '{0}', '{1}', '{2}', '{3}', '{4}', '{5}')".format(NameCreate, DOBCreate, UserNameCreate, PasswordCreate, FavouriteArtistCreate, FavouriteGenreCreate))
conn.commit()

Tags: 数据用户idinputyourconnsqlite3enter
1条回答
网友
1楼 · 发布于 2024-05-23 15:18:08

仅显示您在数据库上的操作是不够的。您需要显示您的数据库架构。在

我们从sqlite doc发出的两条警告开始:

  1. AUTOINCREMENT关键字会增加额外的CPU、内存、磁盘空间和磁盘I/O开销,如果不是严格需要的话,应该避免使用。通常不需要。

  2. 在SQLite中,类型为INTEGER PRIMARY KEY的列是ROWID的别名(不带ROWID表的情况除外),ROWID始终是64位有符号整数。

这样一来,代码的问题在于,autoincrement是在表创建时指定的,而不是在插入时指定的。在

请看一个最小的例子:

import sqlite3

conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)")

NameCreate = 'a'
c.execute("INSERT INTO users ('name') VALUES (?)", (NameCreate, ))
conn.commit()
print(c.execute('select * from users').fetchall())
NameCreate = 'b'
c.execute("INSERT INTO users ('name') VALUES (?)", (NameCreate, ))
conn.commit()
print(c.execute('select * from users').fetchall())

请注意CREATE TABLE行的AUTOINCREMENT,尽管这不是必需的,因为sqlite3将对任何整数主键执行AUTOINCREMENT。 因此,您需要将数据库迁移到表中包含该模式的新模式。在

没有迁移的糟糕的手动解决方案可以如下所示(仅用于权宜之计!),在上述示例中:

^{pr2}$

相关问题 更多 >