字符串的字母被溢出到不同的行并添加到sqlite数据库

问题描述

我试图每次从列表中获取一个值并将它们单独存储在 sqlite 数据库中。 片段如下:

curr.execute('''CREATE TABLE testschritte(indeces INT PRIMARY KEY,test_step TEXT,teil_num INT,FOREIGN KEY(teil_num) REFERENCES testfall(teil_num) ON DELETE SET NULL)''')

def db_data(self):

    samt = Protokoll()
    samt.test_case()
    DML = '''INSERT INTO testfall VALUES(?,?)'''
    data = list(zip_longest(samt.teil_num,samt.cases,fillvalue=None))
    self.curr.executemany(DML,data)
    self.conn.commit()

# Protokoll is a class created in another python file and test_case is the function I want to retreive the values from that file.

以上工作正常。 在下面,我想单独选择 samt.teil_num(此表的外键)并添加到数据库中。

    test = Testschritte()
    test.test_steps()
    DML = '''INSERT INTO testschritte VALUES(?,?,?)'''
    data = list(zip_longest(test.indeces,test.prop,samt.teil_num[1],data)
    self.conn.commit()
# Testschritte is a class created in another python file and test_steps is the function I want to retreive the values from that file.

我得到的当前输出如下所示:

#Table Testschritte

test.indeces | test.prop | samt.teil_num
             |           |
    5        |    a      |    T
    6        |    b      |    e
    7        |    Null   |    i
    Null     |    c      |    l
    Null     |    Null   |    1

预期是:

test.indeces | test.prop | samt.teil_num
             |           |
    5        |    a      |    Teil1
    6        |    b      |    
    7        |    Null   |    
    Null     |    c      |    
    Null     |    Null   |    

samt.teil_num 值对应于其他列值的 5、6、7 和 a、b、c,因此,我试图将 Teil1 与所有这些值对应起来。同样,Teil2 到其他列值,但 Teil1 字母被拆分到不同的行。我知道 data = list( zip_longest (test.indeces,fillvalue=None )) 必须修改,但不确定如何修改。我尝试从 zip_longest 中指定 samt.teil_num[1] 但没有运气。

PS:samt.teil_num 是一个包含 Teil0、Teil1、Teil2 等值的列表,samt.teil_num[1] 应该给我 Teil1(已经给出)但是字母分成不同的行。

几天以来一直坚持这个。有人能帮我得到预期的输出吗。

此外,如果以下可能:

test.indeces | test.prop | samt.teil_num
             |           |
    5        |    a      |    Teil1
    6        |    b      |    Teil1 
    7        |    Null   |    Teil1
    Null     |    c      |    Teil1
    Null     |    Null   |  

因为 indeces 5,6,7 和 prop a,b,c 共享相同的 teil_num 值 i,e Teil1

解决方法

对于 samt.teil_num[1]:

from itertools import zip_longest
indices = [5,6,7,None,None]
prop = ['a','b','c',None]
teil_num = ['Teil0','Teil1','Teil2','Teil3','Teil4']
data = list(zip_longest(indices,prop,[teil_num[0]],fillvalue=None))
print(data)

形成的输出是:

[(5,'a','Teil0'),(6,None),(7,(None,None)]

如果你整体使用 teil_num:

from itertools import zip_longest
indices = [5,teil_num,fillvalue=None))
print(data)

输出:

[(5,'Teil1'),'Teil2'),'Teil3'),'Teil4')]

这样做的原因是 string(teil_num[1]) 被类型转换为列表,如下所示:

['T','e','i','l','1']

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...