如何将Python列表格式化为SQL脚本?
我有一个列表,需要把它格式化成SQL脚本。
list =
[['11', ' 0', " 'MMB'", " '2 MB INTERNATIONAL'", ' NULL', ' NULL', ' 0\n'],
['12', ' 0', " '3D STRUCTURES'", " '3D STRUCTURES'", ' NULL', ' NULL', ' 0\n'],
['13', ' 0', " '2 STRUCTURES'", " '2D STRUCTURES'", ' NULL', ' NULL', ' 0\n'],
想要的SQL脚本格式是这样的:
INSERT INTO `Tbl_ABC` VALUES (11, 0, 'MMB', '2 MB INTERNATIONAL', NULL, NULL, 0)
INSERT INTO `Tbl_ABC` VALUES (12, 0, '3D STRUCTURES', '3D STRUCTURES', NULL, NULL, 0)
INSERT INTO `Tbl_ABC` VALUES (13, 0, '2 STRUCTURES', '2D STRUCTURES', NULL, NULL, 0)
这是我尝试过的:
import pickle
import re
#RX = re.compile(r'^.*?\(\d+,\s0,.*\s0\)\s*$')
outfile = open('destination.sql', 'wb')
data = []
for ln in open('source.sql', 'r').xreadlines():
replace1 = ln.replace("INSERT INTO `Tbl_ABC` VALUES (", "")
replace2 = replace1.replace(")", "")
list_replace = replace2.split(',')
data.append(list_replace)
destinationdata = [d for d in data if d[1] == ' 0' and d[6]==' 0\n']#print '%s ,%s' % (list_replace[1], list_replace[6])
#start write line to destination.sql
#if RX.match(ln):
pickle.dump(destinationdata, outfile)
outfile.close()
谢谢你的帮助!
3 个回答
0
从技术上讲,把一个列表手动转换成SQL其实挺简单的,但……你可以考虑看看SQLAlchemy http://www.sqlalchemy.org。我觉得这个工具真的很棒。它可以帮你把Python中的对象自动转换成数据库表中的行,也可以从表中把数据取回到Python对象。
你可以这样做:
# retrieve each row from the company table and print it :-O
for company in session.query(Company):
print company.name + " " + company.address
# add a new company to the company table:
company = Company("Fred Flintstone", "The Quarry")
session.add(company)
session.commit()
1
基本上,这个应该可以正常工作
print "\n".join(["INSERT INTO `Tbl_ABC` VALUES ("+",".join(x).strip()+")" for x in list1])
结果
INSERT INTO `Tbl_ABC` VALUES (11, 0, 'MMB', '2 MB INTERNATIONAL', NULL, NULL, 0)
INSERT INTO `Tbl_ABC` VALUES (12, 0, '3D STRUCTURES', '3D STRUCTURES', NULL, NULL, 0)
INSERT INTO `Tbl_ABC` VALUES (13, 0, '2 STRUCTURES', '2D STRUCTURES', NULL, NULL, 0)
如果有小的差别,可以根据你的需要进行调整。
另外,我故意把list改成了list1,因为覆盖内置函数并不是个好主意。
1
Iterate over each element in the list
Unpack the element (which is also a list) into its fields
Generate a SQL line from these fields
最简单但也最丑陋的方法,就是直接能完成任务的方法:
list = [
['11', ' 0', " 'MMB'", " '2 MB INTERNATIONAL'", ' NULL', ' NULL', ' 0'],
['12', ' 0', " '3D STRUCTURES'", " '3D STRUCTURES'", ' NULL', ' NULL', ' 0'],
['13', ' 0', " '2 STRUCTURES'", " '2D STRUCTURES'", ' NULL', ' NULL', ' 0']]
for elem in list:
print 'INSERT INTO \'Tbl_ABS\' VALUES (%s, %s, %s, %s, %s, %s, %s)' % tuple(elem)
注意,我在0后面去掉了'\n'(如果需要的话,请根据情况调整)。这个方法适合一次性的脚本。如果你需要更专业的报告和转换,建议使用一些模板库,这样可以把数据和展示分开。