繁体   English   中英

使用Python将消息参数插入MySQL数据库

[英]Inserting message parameters into MySQL database using Python

这是一些我用来尝试将数据插入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()

您不会在查询中传递任何参数,执行的查询包含文字a.value, b.value, ...a, b, ... ,这当然是数据库不知道要做什么的用。

要使其正常工作,您需要满足以下条件:

sql = """INSERT INTO data(F1, F2, F3, ...) VALUES (%s, %s, %s, ...)"""
cursor.execute(sql, (a, b, c, ...))

这样可以正确地转义值并将其绑定到查询,然后再执行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM