这是我用来尝试将数据插入MySQL数据库的一些代码。
break_down(s)是我用来解析消息参数的函数。这些参数将根据需要进行解析。
但是,当我尝试插入这些值时,即使我使用提交,它们也不会保存在MySQL数据库中。为什么是这样?
def break_down(s):
c=s.count('<')
if c==9:
res = re.findall('< (.*?) >', s)
for index in res:
print index,item
elif c==7 or c==3:
temp=parsing(s)
pprint(list(temp))
else:
flag=0
c=s.count(':')
if c==8:
res=s.split(' : ')
res=[item.strip() for item in s.split(':')]
for index, item in enumerate(res):
print index, item
results = [float(x) for x in s.split(' ') if x.count('.') == 1]
pprint(results)
dbinsert(res[0],res[1],res[2],res[3],results[0],results[1],results[2],results[3],flag)
if c==7:
flag=1
res=s.split(' : ')
res=[item.strip() for item in s.split(':')]
for index, item in enumerate(res):
print index, item
results = [float(x) for x in s.split(' ') if x.count('.') == 1]
pprint(results)
dbinsert(res[0],res[1],res[2],res[3],results[0],results[1],results[2],results[3],flag)
def parsing(s):
for t in s.split('<'):
for u in t.strip().split('>',1):
if u.strip(): yield u.strip()
def dbinsert(a,b,c,d,e,f,g,h,flag):
import MySQLdb
db = MySQLdb.Connect(host="127.0.0.1", port=3306, user="root", passwd="root", db="ups")
print "In dbinsert"
cursor = db.cursor()
try:
if flag==0:
sql = """INSERT INTO data(F1,
F2, F3, F4, F5, F6, F7, F8)
VALUES (a.value,b.value,c.value,d.value,e.value,f.value,g.value,h.value)"""
cursor.execute(sql)
db.commit()
elif flag==1:
sql = """INSERT INTO data(F1,
F2, F3, F4, F5, F6, F7, F8)
VALUES (a,b,c,,e,f,g,h)"""
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
答案 0 :(得分:0)
您不在查询中传递任何参数,您执行的查询包含文字a.value, b.value, ...
或a, b, ...
,数据库当然不知道该怎么做。
为了使其有效,您需要以下内容:
sql = """INSERT INTO data(F1, F2, F3, ...) VALUES (%s, %s, %s, ...)"""
cursor.execute(sql, (a, b, c, ...))
这将正确地转义值并在执行之前将它们绑定到查询。