【发布时间】:2012-08-02 04:52:53
【问题描述】:
假设您有一个包含大量项目的键值 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);
(嗯,有五个值是可以的,但想象一下,例如有五百个。)
是否有任何用于有效和短字符串 SQL 插入的 Python 类/方法?我写了这段代码:
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 字符串以相同的简单方法插入多个值?
【问题讨论】:
-
如果你确实想使用关系型数据库,可以使用即将推出的具有原生 JSON 数据类型的 PostgreSQL 9.2。
标签: python sql json dictionary insert