我想用python把一些数据插入数据库。跳过大量代码后,我使用了以下内容:
cursor.execute('insert into table_name (column1, column2) values (%s, %s)', variable1, variable2)
一切都很好。我从一个api的多个端点获取数据,这些端点都以一种相当简单的格式返回数据,例如:
[
{
"LearnerId": 123456,
"LearnerCode": "654321",
"Date": "2018-07-02",
"Session": "AM",
"AttendanceCode": "/\\",
"AttendanceCodeId": 1,
"MinutesLate": null,
"Notes": null,
"ClassDateRollId": 347514,
"GroupCode": "7A",
"EnteredDate": "2018-07-02 10:10:24"
},
{
"LearnerId": 778832,
"LearnerCode": "837478",
"Date": "2018-07-02",
"Session": "AM",
"AttendanceCode": "/\\",
"AttendanceCodeId": 1,
"MinutesLate": null,
"Notes": null,
"ClassDateRollId": 347514,
"GroupCode": "9E",
"EnteredDate": "2018-07-02 10:12:34"
}
]
实际数据和key:value pairs 端点之间不同,但每个端点的基本结构(即列表中每个项的字典的单个“级别”)是相同的。
每个端点基本上都是将数据放入一个表中,在这个表中列名完全复制json中的键,因此我非常希望有一个insert函数,它可以简单地迭代json并从中构建insert语句,使用键和值填充列名。对于这样的值,我可以这样做:
a = [
{
'foo':'one',
'bar':'two'
}
]
cursor.execute('insert into table_name (foo, bar) values (%s, %s)', tuple(a[0].values()))
但我无法通过编程方式填充'(foo,bar)'位,这样就不必手动键入列名。请问我该怎么做?
2条答案
按热度按时间lb3vh1jj1#
应该将insert语句分成两部分第一部分是列名,第二部分是值部分。可以尝试以下代码:
vbopmzt12#
出于某种原因,每当我发布的时候,我的大脑立刻意识到我是愚蠢的,答案很简单。str.join()和字符串乘法的组合!