![](/img/trans.png)
[英]MySQL error message: “1054 (42S22): Unknown column 'inf' in 'field list'”
[英]Error message in python-mysql cursor: 1054 unknown column “x” in 'field list'
这是我的第一篇文章! 我也刚刚开始编程,所以请耐心等待!
我正在尝试将一堆.csv文件加载到数据库中,以便稍后对数据执行各种报告。 我开始在mysql中创建一些表,其中包含匹配的字段名称和数据类型,以及将加载到表中的内容。 我正在操作文件名(为了解析日期以用作我表中的字段)并使用python清理数据。
所以我现在的问题(哈哈......)是我在尝试向'mysql'插入'查询'时收到此错误消息。
Traceback (most recent call last):
File "C:\Program Files\Python\load_domains2.py", line 80, in <module>
cur.execute(sql)
File "C:\Program Files\Python\lib\site-packages\MySQLdb\cursors.py", line 166, in execute
self.errorhandler(self, exc, value)
File "C:\Program Files\Python\lib\site-packages\MySQLdb\connections.py", line 35, in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (1054, "Unknown column 'a1200e.com' in 'field list'")
'a1200e.com'是指我正在插入该列的特定域名。 我的查询如下:
sql="""INSERT INTO temporary_load
(domain_name, session_count, search_count, click_count,
revenue, revenue_per_min, cost_per_click, traffic_date)
VALUES (%s, %d, %d, %d, %d, %d, %d, %s)""" %(cell[0],
int(cell[1]),
int(cell[2].replace (",","")),
int(cell[3].replace(",","")),
float(cell[4].replace("$","")),
float(cell[5].replace("$","")),
float(cell[6].replace("$","")),
parsed_date)
cur.execute(sql)
我对这一切都很陌生,所以我确信我的代码效率不高,但我只想把所有内容都放在一边,这对我来说很清楚。 我不明白的是,我确保我的表已正确定义数据类型(对应于我的查询中的数据类型)。 有什么我想念的吗? 我一直试图解决这个问题,不知道出了什么问题:/
非常感谢!!! 瓦尔
像往常一样, Thomas完全正确:随意让MySQLdb处理引用问题。
除了这个建议:
%s
)。 MySQLdb将确保将值正确转换为SQL文字。 这是从.csv文件向MySQL数据库插入值的一种方法:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
import MySQLdb
import os
def main():
db = MySQLdb.connect(db="mydb",passwd="mypasswd",) # connection string
filename = 'data.csv'
f = open(filename, "rb") # open your csv file
reader = csv.reader(f)
# assuming the first line of your csv file has column names
col_names = reader.next() # first line of .csv file
reader = csv.DictReader(f, col_names) # apply column names to row values
to_db = [] # this list holds values you will insert to db
for row in reader: # loop over remaining lines in .csv file
to_db.append((row['col1'],row['col2']))
# or if you prefer one-liners
#to_db = [(row['col1'],row['col2']) for row in reader]
f.close() # we're done with the file now
cursor = db.cursor()
cursor.executemany('''INSERT INTO mytable (col1,col2)
VALUES (%s, %s)''', to_db) # note the two arguments
cursor.close()
db.close()
if __name__ == "__main__":
main()
您应该使用DB-API引用而不是直接在SQL查询中包含数据:
sql = """INSERT INTO temporary_load
(domain_name, session_count, search_count, click_count,
revenue, revenue_per_min, cost_per_click, traffic_date)
VALUES (%s, %d, %d, %d, %d, %d, %d, %s)"""
args = (cell[0],
int(cell[1]),
int(cell[2].replace (",","")),
int(cell[3].replace(",","")),
float(cell[4].replace("$","")),
float(cell[5].replace("$","")),
float(cell[6].replace("$","")),
parsed_date)
cur.execute(sql, args)
这使得DB-API模块适当地引用了值,并解决了手动执行时可能遇到的一系列问题(通常是错误的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.