我是编程新手。我有一个名为dictionary
的记录,可以接收各种输入,例如“颜色”,“类型”和“#39;类型”。 '量'等。现在我尝试添加一个Date列,然后插入到sqlite表中,通过' if循环'使用下面的代码。但是我在2017年附近发现了"操作错误,即日期附近。
有人可以帮忙吗?提前致谢
Date = str(datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d'))
record['Date'] = Date
column = [record['Color'], Date]
values = [record['quantity'], record['Date']]
column = ','.join(column)
if record['Type'] == 'T-Shirts' and record['Style'] == 'Soft':
stment = ("INSERT INTO xtrasmall (%s) values(?)" %column)
c.execute(stment, values)
conn.commit()
答案 0 :(得分:0)
<强>更新强>
您可以按如下方式简化代码:
from datetime import datetime
date = datetime.now().date()
sql = "INSERT INTO xtrasmall (%s, Date) values (?, ?)" % record['Color']
c.execute(sql, (record['quantity'], date))
这会将所选颜色的值直接替换为查询字符串中的列名。然后执行查询,将数量和日期字符串作为参数传递。日期应自动转换为字符串,但如果需要,您可以使用str()
进行转换。
这假设其他颜色列具有默认值(可能为0),或允许空值。
原始回答
因为您正在使用字符串插值构造查询(即用%s
替换字符串),您的语句将变为如下所示:
INSERT INTO xtrasmall (Red,2017-10-06) values(?)
无效,因为2017-10-06
不是有效的列名。在执行之前打印stment
以查看。
如果您知道列名称只是在查询中指定它们:
values = ['Red', 2, Date]
c.execute("INSERT INTO xtrasmall (color, quantity, date) values (?, ?, ?)", values)
conn.commit()
您需要为要插入的每列使用?
。
看起来您想要使用其键和值插入字典。这可以这样做:
record = {'date':'2017-10-06', 'color': 'Red', 'quantity': 2}
columns = ','.join(record.keys())
placeholders = ','.join('?' * len(record.values()))
sql = 'INSERT INTO xtrasmall ({}) VALUES ({})'.format(columns, placeholders)
c.execute(sql, record.values())
此代码将生成参数化的SQL语句:
INSERT INTO xtrasmall (date,color,quantity) VALUES (?,?,?)
然后使用字典的值作为参数执行它。