将代码写入codes.db不正确

时间:2015-03-01 18:40:51

标签: python sqlite

我正在尝试在python中创建一个写入数据库的随机代码生成器。我有生成和写入数据库的代码,但它不是向数据库添加完整的代码,而是通过字母循环。这是我的代码生成器代码:

import string
import random
import sqlite3
def id_generator():
    db = sqlite3.connect('codes.db')
    c = db.cursor()
    number_of_codes = 10
    stringLength = 9
    id_code = input("what letter should this begin with: \n")
    id_code = id_code.upper()
    dict_ofcodes = []
    for x in range(0, number_of_codes):
        codez = (''.join(random.choice(string.ascii_uppercase) for i in range(stringLength)))
        final_codez = (id_code + codez)
        dict_ofcodes.insert(x, final_codez)
    print (dict_ofcodes)
    dict_ofcodes_tuple = tuple(dict_ofcodes)
    print(dict_ofcodes_tuple)
    for x in range(0, number_of_codes):
        c.executemany(''' INSERT INTO codes(codes) VALUES(?)''', dict_ofcodes_tuple[x])
    db.commit()
    db.close()
id_generator()

这是打印的内容

['AALRRIULNC', 'AZTKZBKTLK', 'ATWMWYWICO', 'AWQJIJYEJH', 'AQFIONPUNJ', 'AMJRXUIJXM', 'AUDRLSBLSG', 'ABXYXDUMPD', 'AUAXRQURBH', 'ADQEVIRDFU']
('AALRRIULNC', 'AZTKZBKTLK', 'ATWMWYWICO', 'AWQJIJYEJH', 'AQFIONPUNJ', 'AMJRXUIJXM', 'AUDRLSBLSG', 'ABXYXDUMPD', 'AUAXRQURBH', 'ADQEVIRDFU')

它向数据库写入代码的单个字母:     一个     F     ÿ 等等

我用来创建架构的代码包含在python文件

    import sqlite3

    def writeDB():
        db = sqlite3.connect('codes.db')
        c = db.cursor()

    # Create table
        c.execute('''CREATE TABLE codes (codes TEXT)''')


    # Save (commit) the changes
        db.commit()

    #can also close the connection if done with it.
    # be sure any changes have been committed or they will be lost.
        db.close()
writeDB()

我用mac终端创建了文件。   我怎样才能将完整的代码写入数据库?

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

c.executemany(''' INSERT INTO codes(codes) VALUES(?)''', dict_ofcodes_tuple[x])

executemany用于迭代参数列表并为每个参数调用sql语句。所以你的dict_ofcodes_tupel [x]被视为一个字符数组,并为每个字符调用INSERT。

如果要将整个字符串作为一个插入,请改用execute()。

c.execute(''' INSERT INTO codes(codes) VALUES(?)''', (dict_ofcodes_tuple[x],))

c.execute(''' INSERT INTO codes(codes) VALUES(?)''', [dict_ofcodes_tuple[x]])
相关问题