如何在Python中向sqlite3插入空值
我在sqlite3中创建了一个表,下面是这个表的结构:
cid name type notnull pk
0 wheelId INTEGER 1 1
1 wheelName VARCHAR 1 0
2 paraDiam INTEGER 0 0
3 paraWidth FLOAT 0 0
4 paraEt FLOAT 0 0
5 paraHole INTEGER 0 0
6 factParaHole INTEGER 0 0
7 paraCenterhole FLOAT 0 0
8 wheelColorName VARCHAR 0 0
9 wheelColorNameShow TEXT 0 0
10 paraWeight FLOAT 0 0
11 vpPrice INTEGER 0 0
12 ntStock INTEGER 0 0
13 wheelURL VARCHAR 0 0
14 wheelImg VARCHAR 0 0
15 wheelRank INTEGER 0 0
现在,我想用python往这个表里插入一条记录,我只想插入'wheelName'和'wheelImg'这两列的值,其他的列我希望保持为空(第一个列是
我在网上找了几乎所有能找到的方法:
cursor.execute("""INSERT INTO WHEELS (wheelName,wheelImg) VALUES (%s,%s)""" , (WHEELNAME,WHEELIMG))
但是python报错了,错误信息是
sqlite3.OperationalError: near "%": syntax error
cursor.execute("""INSERT INTO WHEELS(WHEELID,WHEELNAME, PARADIAM, PARAWIDTH, PARAET,PARAHOLE,FACTPARAHOLE, PARACENTERHOLE,WHEELCOLORNAME,WHEELCOLORNAMESHOW,PARAWEIGHT,VPPRICE,NTSTOCK, WHEELURL,WHEELIMG,WHEELRANK) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""" , (WHEELID, WHEELNAME, PARADIAM, PARAWIDTH, PARAET,PARAHOLE,FACTPARAHOLE, PARACENTERHOLE,WHEELCOLORNAME,WHEELCOLORNAMESHOW,PARAWEIGHT,VPPRICE,NTSTOCK, WHEELURL,WHEELIMG,WHEELRANK))
在这里,我把其他的值设置为None
,像这样:
PARADIAM = None
PARAWIDTH = None
PARAET = None
PARAHOLE = None
结果python又报错了,错误信息还是sqlite3.OperationalError: near "%": syntax error
。
1 个回答
2
sqlite3
适配器使用 ?
来表示 SQL 参数,而不是 %s
:
cursor.execute("INSERT INTO WHEELS (wheelName,wheelImg) VALUES (?, ?)", (WHEELNAME,WHEELIMG))
你的数据库结构也限制了 wheelColorNameShow
:
"wheelColorNameShow" TEXT check(typeof("wheelColorNameShow") = 'text')
这意味着这个字段不能再是 NULL。你 必须 为这个列提供一个值:
cursor.execute('insert into wheels (wheelName,wheelImg,wheelColorNameShow) VALUES (?, ?, ?)', ('test', 'test', 'test'))
成功了。