假设你有一个带有大量项的键值对Python字典(或列表)。假设你正在读取一个更大的JSON文件,并且你想将其内容存储到MySQL表中,其中键作为列名,值作为值本身。
JSON示例:
"display_location": {
"city":"Bratislava",
"state_name":"Slovakia",
"country_iso3166":"SK",
"latitude":"48.20000076",
"longitude":"17.20000076",
}
那么手动编写类似这样的SQL插入语句是相当低效的:
INSERT INTO TABLE (city, state_name, country_iso3166, latitude, longitude) VALUES('%s','%s','%s','%s','%s')
% (Bratislava, Slovakia, SK, 48.20000076, 17.20000076);
(好吧,对于五个值来说还可以,但是想象一下如果有五百个值呢。)是否有任何Python类/方法可以进行有效和短字符串的SQL插入?我编写了这段代码:
for key,value in list.iteritems():
value_type = type(value)
if value_type is unicode:
vars_to_sql.append(value.encode('ascii', 'ignore'))
keys_to_sql.append(key.encode('ascii', 'ignore'))
else:
vars_to_sql.append(value)
keys_to_sql.append(key)
keys_to_sql = ', '.join(keys_to_sql)
之后插入操作看起来更加简单:
INSERT INTO conditions_bratislava(%s) VALUES %r" % (keys_to_sql, tuple(vars_to_sql),)
即使有成千上万的值,使用这个插入语句仍然没有问题。
请注意该条件将解码Unicode字符串,因此每个值之前都不会有“u”字母。
那么,是否存在更有效和准备好的类或方法来用短INSERT语句以相同简单的方式插入多个值?