简体   繁体   中英

run mySql command in python

I have a python program which connects to a mySql table and insert some values in it but it does not work. here is my code:

 doc = minidom.parse("wscanOutput.xml")
 tracks = doc.getElementsByTagName("track")
 for track in tracks:
     title = track.getElementsByTagName("title")[0]
     location = track.getElementsByTagName("location")[0]
     vlcOption = track.getElementsByTagName("vlc:option")[0]
     tit = title.firstChild.data[6: ].replace (" ", "-")
     loc = location.firstChild.data[18:27]
     sid = vlcOption.firstChild.data[8: ]
     dvbID = 0
     tuneID = 0
     db = MySQLdb.connect("localhost","root","paco","dvbDB")
     cursor = db.cursor()
     print("INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (%s" % dvbID + ", %s" % tuneID + ", '%s'" % tit + ", %s" % sid + ", %s)" % loc)
     sql = "INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (%s" % dvbID + ", %s" % tuneID + ", '%s'" % tit + ", %s" % sid + ", %s)" % loc
     cursor.execute(sql)
 db.close()

and here is my output print() that shows it works fine:

INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'IRIB-QURAN', 108, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'IRIB-SALAMAT', 119, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'IRIB-NASIM', 120, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-IRAN', 151, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-PAYAM', 152, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-JAVAN', 153, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-MAAREF', 154, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-QURAN', 155, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-FARHANG', 156, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-SALAMAT', 157, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-VARZESH', 158, 602000000)
INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (0, 0, 'RADIO-EGHTESAD', 159, 602000000)

but database is still empty means curser.execute(sql) not executing. how to execute these inserts?

Try add conn.commit() to your code.

conn = MySQLdb.connect("localhost","root","paco","dvbDB")
cursor = conn.cursor()
sql = "INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (%s" % dvbID + ", %s" % tuneID + ", '%s'" % tit + ", %s" % sid + ", %s)" % loc
cursor.execute(sql)    
conn.commit() #notice

OR set connection's autocommit to True

conn = MySQLdb.connect("localhost","root","paco","dvbDB")
cursor = conn.cursor()
cursor.connection.autocommit(True) #notice 
sql = "INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (%s" % dvbID + ", %s" % tuneID + ", '%s'" % tit + ", %s" % sid + ", %s)" % loc
cursor.execute(sql)

A little advice on your execute style.

Try this way:

sql = "INSERT INTO dvbDBTable (dvb_id, tune_id, channel_name, sid, frequency) VALUES (%s, %s, %s, %s, %s)"
cursor.execute(sql,(dbvID, tuneID, tit, sid, loc))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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