【发布时间】:2011-07-28 21:05:46
【问题描述】:
我正在使用MySQLdb 将大量数据从文本文件上传到 MySQL 服务器。如果我手动准备一个字符串(例如'as', '123', 12, 23),这可以正常工作,但是我不知道如何循环遍历一个列表来生成它,因为我需要连接字符串和整数。
一个有效的插入语句示例如下:
""" INSERT INTO ACS(ST, CODE, BC001, BC002, BC003)
VALUES ('AK', '1234567', 20, 30, 40)"""
这就是我尝试从列表中生成此语句的方式:
import MySQLdb
# sample data
table = 'TestTable'
header = ['ST', 'CODE', 'BC001', 'BC002', 'BC003']
values = [['AA', '1234567', 20, 30, 40], ['BB', '1234567', 20, 30, 40], ['CC', '1234567', 20, 30, 40],['DD', '1234567', 20, 30, 40]]
# local SQL server on my computer
db = MySQLdb.connect (host = 'localhost', user = 'root', passwd = '', db = 'test')
# prepare a cursor object using cursor() method
cursor = db.cursor()
# header columns
sql1 = '('
for i in range(len(header)):
sql1 += header[i] + ','
sql1 = 'INSERT INTO ' + table + sql1[:-1] + ')'
# now loop through data values and combine with header each time
for i in range(len(values)):
sql2 = ''
for j in range(len(values[i])):
sql2 += values[i][j] + ',' #error occurs here
# structure: sql2 = """ VALUES ('AA', '1234567', 20, 30, 40)"""
sql2 = 'VALUES ' + table + sql2[:-1] + ')'
sql = sql1 + sql2
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
我得到的错误信息是
TypeError: unsupported operand type(s) for +: 'int' and 'str'
我明白为什么会这样,但我想不出另一种生成字符串的方法。有没有更好的方法来生成这些字符串?
我在 Win7 64 位上使用 Python27。
【问题讨论】:
-
对不起,我在google上查了一下,没有pymsql这样的东西?可以给个主页链接吗?
-
糟糕,我写错了包名。这是 MySQLdb - 我会更新问题;对此感到抱歉。
标签: python mysql sql database string-formatting