python sqlite create id INTEGER PRIMARY KEY AUTOINCREMENT

时间:2017-01-30 15:03:22

标签: python sqlite

创建一个简单的数据库,并使行具有id,以便稍后我可以选择行值:

conn = sqlite3.connect("APIlan.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS ENERGYLOG (id INTEGER PRIMARY KEY AUTOINCREMENT, totalenergy REAL)''')
c.execute("INSERT INTO ENERGYLOG VALUES (?);", (total_energy,))
conn.commit()       
conn.close()

错误sqlite3.OperationalError: table ENERGYLOG has 2 columns but 1 values were supplied

第二次尝试:

conn = sqlite3.connect("APIlan.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS ENERGYLOG (id INTEGER PRIMARY KEY AUTOINCREMENT, totalenergy REAL)''')
c.execute("INSERT INTO ENERGYLOG VALUES (?,?);", (NULL,total_energy,))
conn.commit()       
conn.close()

错误NameError: name 'NULL' is not defined

如果没有提供id的值,我该如何将它放入表中?感谢。

2 个答案:

答案 0 :(得分:2)

您应该明确列出要插入的列:

c.execute("INSERT INTO ENERGYLOG (totalenergy) VALUES (?);", (total_energy,))

就参数化NULL而言,您应指定None作为参数值:

c.execute("INSERT INTO ENERGYLOG VALUES (?, ?);", (None, total_energy))

或者,使用NULL和一个参数:

c.execute("INSERT INTO ENERGYLOG VALUES (NULL, ?);", (total_energy,))

答案 1 :(得分:2)

我有两个解决方案。

1.您首先尝试,如果您只想插入您选择的列,您可以遵循以下语法:

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...valueN);

所以,你可以这样写:

c.execute("INSERT INTO ENERGYLOG (totalenergy) VALUES (?);", (total_energy,))

2.第二次尝试,如果要插入所有列,可以替换“#NULL;'到'无':

c.execute("INSERT INTO ENERGYLOG VALUES (?, ?);", (None, total_energy))

因为python不知道' NULL'。

在SQL中我们使用' NULL'在python中我们使用'无'。

希望它可以帮到你!