我正在尝试使用a dict
来做SQL INSERT
.逻辑基本上是:
INSERT INTO table (dict.keys()) VALUES dict.values()
Run Code Online (Sandbox Code Playgroud)
但是,我很难确定正确的语法/流程来执行此操作.这就是我目前拥有的:
# data = {...}
sorted_column_headers_list = []
sorted_column_values_list = []
for k, v in data.items():
sorted_column_headers_list.append(k)
sorted_column_values_list.append(v)
sorted_column_headers_string = ', '.join(sorted_column_headers_list)
sorted_column_values_string = ', '.join(sorted_column_values_list)
cursor.execute("""INSERT INTO title (%s)
VALUES (%s)""",
(sorted_column_headers_string, sorted_column_values_string))
Run Code Online (Sandbox Code Playgroud)
从这里我得到一个SQL异常(我认为与逗号也包含在我拥有的一些值中这一事实相关).做上述事情的正确方法是什么?
小智 57
我认为使用MySQL的评论并不完全.MySQLdb不在列中进行参数替换,只是值(IIUC) - 所以可能更像
placeholders = ', '.join(['%s'] * len(myDict))
columns = ', '.join(myDict.keys())
sql = "INSERT INTO %s ( %s ) VALUES ( %s )" % (table, columns, placeholders)
cursor.execute(sql, myDict.values())
Run Code Online (Sandbox Code Playgroud)
你没有在列上逃脱,所以你可能想先检查它们....
有关更完整的解决方案,请参阅http://mail.python.org/pipermail/tutor/2010-December/080701.html
g.d*_*d.c 20
您想要向查询添加参数占位符.这可能会得到你所需要的:
qmarks = ', '.join('?' * len(myDict))
qry = "Insert Into Table (%s) Values (%s)" % (qmarks, qmarks)
cursor.execute(qry, myDict.keys() + myDict.values())
Run Code Online (Sandbox Code Playgroud)
Bla*_*ard 18
这里总是很好的答案,但在Python 3中,你应该写下面的内容:
placeholder = ", ".join(["%s"] * len(dict))
stmt = "insert into `{table}` ({columns}) values ({values});".format(table=table_name, columns=",".join(dict.keys()), values=placeholder)
cur.execute(stmt, list(dict.values()))
Run Code Online (Sandbox Code Playgroud)
不要忘记转换dict.values()
为列表,因为在Python 3中,dict.values()
返回视图而不是列表.
另外,不要倒入dict.values()
,stmt
因为它会join
通过它从字符串中撕掉引号,这会导致MySQL插入错误.所以你应该总是cur.execute()
动态地把它放进去.
归档时间: |
|
查看次数: |
50751 次 |
最近记录: |