2015-03-13 71 views
0

我有我的Python已經創建添加列表到一​​個單一的MySQL表字段

+--------------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+--------------+--------------+------+-----+---------+-------+ 
| consensus | char(40)  | NO |  | NULL |  | 
| identityb32 | char(40)  | NO |  | NULL |  | 
| pubdate  | char(40)  | NO |  | NULL |  | 
| dirport  | char(6)  | NO |  | NULL |  | 
| ip   | char(40)  | NO |  | NULL |  | 
| orport  | char(40)  | NO |  | NULL |  | 
| identityhash | char(40)  | NO |  | NULL |  | 
| nick   | char(40)  | NO |  | NULL |  | 
| version  | char(40)  | NO |  | NULL |  | 
| flags  | varchar(500) | NO |  | NULL |  | 
| identity  | char(40)  | NO |  | NULL |  | 
| digest  | char(40)  | NO |  | NULL |  | 
| pubtime  | char(40)  | NO |  | NULL |  | 
+--------------+--------------+------+-----+---------+-------+ 
13 rows in set (0.00 sec) 

一切工作順利接受一個小問題一個MySQL表。

對於我flags場我需要添加值的格式爲:

['Exit', 'Fast', 'Guard', 'HSDir', 'Named', 'Running', 'Stable', 'V2Dir', 'Valid'] 

,我不能將這些值添加到表中。爲了將字段的所有標誌值添加到標誌字段,我需要做什麼?

Python代碼:

format = """','""" 

c = 0 
# Prepare SQL query to INSERT a record into the database. 
sql = """INSERT INTO """ + onion_Add +"""(consensus, identityb32, pubdate, dirport, ip, orport, identityhash, nick, version, flags, identity, digest, pubtime) 
     VALUES ('""" +consensus.consensus_name + format + identityb32[c] + format + pubdate[c] + format + dirport[c] + format + ip[c] + format + orport[c] + format + identityhash[c] + format + nick[c] + format + version[c] + format + flags + format + identity[c] + format + digest[c] + format + pubtime[c] + """')""" 
try: 
    # Execute the SQL command 
    cursor.execute(sql) 
    # Commit your changes in the database 
    db.commit() 
except: 
    # Rollback in case there is any error 
    db.rollback() 
    print "adding to db error" 
# disconnect from server 
db.close() 
+0

爲什麼不把名單與'str_flags字符串=','。join(flags)'? – xnx 2015-03-13 13:13:18

+0

向我們展示您用於INSERT這樣的列表作爲'flag'的值的Python代碼。 – 2015-03-13 13:14:18

+0

現在在上面添加插入的Python代碼 – user2065929 2015-03-13 13:16:17

回答

0

你可能會發現更容易,更安全,讓MySQLdb的構建語句爲您提供:

sql_fmt = 'INSERT INTO %s (consensus, identityb32, pubdate, dirport, ip, orport, identityhash, nick, version, flags, identity, digest, pubtime) VALUES (' + ', '.join(['%s']*14) + ')' 

... 

cursor.execute(sql_fmt, (onion_Add, consensus.consensus_name, 
         identityb32[c], pubdate[c], dirport[c], 
         ip[c], orport[c], identityhash[c], nick[c], 
         version[c], ','.join(flags), identity[c], 
         digest[c], pubtime[c]) 
      ) 
相關問題