我当前在将数据导入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()
仅显示您在数据库上的操作是不够的。您需要显示您的数据库架构。在
我们从sqlite doc发出的两条警告开始:
AUTOINCREMENT关键字会增加额外的CPU、内存、磁盘空间和磁盘I/O开销,如果不是严格需要的话,应该避免使用。通常不需要。
在SQLite中,类型为INTEGER PRIMARY KEY的列是ROWID的别名(不带ROWID表的情况除外),ROWID始终是64位有符号整数。
这样一来,代码的问题在于,autoincrement是在表创建时指定的,而不是在插入时指定的。在
请看一个最小的例子:
请注意CREATE TABLE行的AUTOINCREMENT,尽管这不是必需的,因为sqlite3将对任何整数主键执行AUTOINCREMENT。 因此,您需要将数据库迁移到表中包含该模式的新模式。在
没有迁移的糟糕的手动解决方案可以如下所示(仅用于权宜之计!),在上述示例中:
^{pr2}$相关问题 更多 >
编程相关推荐