我对python和mysql也很陌生,目前我正在尝试“将数据插入表中,我已经在我的机器上的WAMP服务器上设置了事件。我需要存储到数据库中的数据是存储在我的python程序中的各种数组中,这些都已正确存储。我能够通过我的python程序成功连接到localhost数据库但是我在写入数据库时遇到了mysql语法问题。
我希望有人能帮助我 - 我基本上设置了一个for循环,将存储在数组中的元素写入我在本机上设置的数据库(localhost)。
length = range(len(event_ids))
imageid = 0
for z in length:
cur.execute("""INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES (%s, %s, %s, %s, %s, %s, %s, %s""" %(event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z]))
db.commit()
cursor.close()
db.close()
我收到的错误包括以下信息。这里显示的元素是从我已成功指定的数组中读取“@ 2013042020,Prodijig Dublin,2013-04-20 20:00:00,2013-04-20 23:59:00,V0-001-0 :”。我只是不知道为什么我收到SQL语法错误。如果有人能够提供有关我可能出错的地方的信息,我真的很感激。
错误:
cur.execute("""INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES (%s, %s, %s, %s, %s, %s, %s, %s""" %(event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z]))
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 202, in execute
self.errorhandler(self, exc, value)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@2013042020, Prodijig Dublin, 2013-04-20 20:00:00, 2013-04-20 23:59:00, V0-001-0' at line 1")
编辑:我在下面的讨论后对此代码进行了修复,但是我现在收到“IndexError:list index out of range”错误,由于某些原因我目前无法解释并且我的python程序在35次迭代后终止(当它应该迭代并将元素插入数据库50次)。如果有人也可以帮助我,我会非常感激。然而,这可能与此陈述没有关系 - 我现在不确定。
我修复的mysql插入代码仍然是:
cur.execute('INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)' , (event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z]))
答案 0 :(得分:1)
您需要在插入的所有字符串值周围引用:
cur.execute("""INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'""" %(event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z]))
答案 1 :(得分:0)
您正在运行的查询是:
INSERT INTO events (
event_id,
event_title,
start_time,
stop_time,
venue_id,
image_id,
all_day,
venue_name)
VALUES (
@2013042020,
Prodijig Dublin,
2013-04-20 20:00:00,
2013-04-20 23:59:00,
V0-001-0 (rest of query is missing)
MySQL抱怨@2013042020
不是有效值。我假设event_id
是一个整数列,因此该值不应包含@
符号。一旦你解决了这个问题,你会发现MySQL有更多的抱怨你的查询:
Prodijig Dublin should be a string: 'Prodijig Dublin'
2013-04-20 20:00:00 should be a date : #2013-04-20 20:00:00# (quotes also work)
2013-04-20 23:59:00 should be a date : #2013-04-20 23:59:00#
V0-001-0 should be as tring: 'V-0-001-0'