with open('employee.txt') as textfile:
csvreader = csv.reader(textfile, delimiter='\t')
csvdata = []
for row in csvreader:
csvdata.append(row)
conn = pymysql.connect (host = "localhost",user = "root", passwd = "password",db = "details1")
c = conn.cursor()
for row in csvdata:
c.execute("INSERT INTO employee6(serial_no, first_name, last_name, age, sex,city) VALUES ('%s', '%s', '%s', '%s', '%s','%s')" % (serial_no,first_name,last_name,age,sex,city))
conn.commit()
c.close()`enter code here`
但是我遇到一个错误 在()中 8 c = conn.cursor() 9 for csvdata中的行: ---> 10 c.execute(“ INSERT INTO employee6(序列号,名字,姓氏,年龄,性别,城市)VALUES('%s','%s','%s','%s','% s','%s')“%(序列号,名字,姓氏,年龄,性别,城市) 11 12 conn.commit() NameError:名称“ serial_no”未定义 为什么我会收到此错误
答案 0 :(得分:1)
应该是:
c.execute("INSERT INTO employee6(serial_no, first_name, last_name, age, sex,city) VALUES ('%s', '%s', '%s', '%s', '%s','%s')" % (row["serial_no"], row["first_name"], row["last_name"], row["age"],row["sex"],row["city"]))
已编辑
with open('employee.txt') as textfile:
csvreader = csv.reader(textfile, delimiter='\t')
csvdata = []
conn = pymysql.connect (host = "localhost",user = "root", passwd = "password",db = "details1")
c = conn.cursor()
for row in csvreader:
c.execute("INSERT INTO employee6(serial_no, first_name, last_name, age, sex,city) VALUES ('%s', '%s', '%s', '%s', '%s','%s')" % (row["serial_no"], row["first_name"], row["last_name"], row["age"],row["sex"],row["city"]))
conn.commit()
c.close()
答案 1 :(得分:0)
假设读取输入文件可以正常工作,则csvdata
变量中将有一个列表列表。
不建议您尝试使用字符串插值来创建SQL查询字符串的方式,这可能很危险。它允许SQL injection attacks,但也可以使字符串格式化以强制使用正确的数据类型,特别是对于INSERT查询而言。
所有兼容DB-API 2的适配器都必须传递sequence of parameters以及适配器将安全替换的查询字符串。
由于row
在迭代csvdata
时应该已经是列表,因此您的execute
调用看起来像这样:
for row in csvdata:
c.execute("INSERT INTO employee6(serial_no, first_name, last_name, age, sex,city) VALUES (%s, %s, %s, %s, %s,%s)", row)
但是,由于您的csvdata
已经是列表列表,因此您也可以使用executemany代替上面的内容:
c.executemany("INSERT INTO employee6(serial_no, first_name, last_name, age, sex,city) VALUES (%s, %s, %s, %s, %s,%s)", csvdata[1:])
注意:csvdata[1:]
是要从INSERT中排除标题行。