Python,存储列表并插入表的一列

时间:2016-02-05 11:14:55

标签: python mysql

我正在阅读的文件格式如下:

12       #block belonging to ID1
78
60
98
7

65      #block belonging to ID2
14
22

每个块都以空行终止,每个块属于一个ID。我想将此信息插入到一个表中,其中包含两个字段ID_from(这是块的ID所属)和ID_to(块中的数字)。所以对于前:

ID_from    ID_to
1          12
1          78
1          60
1          98
1          7
2          65
2          14
2          22

我有一个复合主键,它是这两个字段的组合,允许我在ID_from列中重复相同的ID。这是我的问题代码:

citations = line
my_list = []
        my_list.append(citations)
        my_list = " ".join(my_list)

db1.execute('''INSERT INTO citations(
                        ID_from, ID_to) VALUES(%s,%s)''',
                        (ID, my_list))

conn.commit()

(ID已在代码的前面定义)。我相信通过此代码实现的是创建list- citations_collect []并将块的每一行附加到列表 - 实质上是应该插入到ID_to列中的所有值的列表。我得到的当前输出只是每个块中的最后一个值及其出现的相应块ID。即:

ID_from    ID_to
1           7
2           22

我的猜测是我应该将执行查询放入循环中,但我不确定循环应该包含什么。我试图用join函数做的是将每个块的值存储在一个由空格分隔的行中的列表中,并且插入到表中会更简单但是我没有对输出产生影响。 我是python和mysql的新手,所以我感谢任何反馈!

2 个答案:

答案 0 :(得分:0)

如果没有看到完整的代码,很难推荐一些东西。无论如何,我想这是因为你在循环中逐行读取文件,并且在每个循环中你定义my_list。因此,在每个循环中my_list只包含一个项目,并且在块的末尾,您将最后一个项目写入数据库。 你可以尝试这样的事情:

id_from = 1
my_list = []
for line in file:
    if line.strip() == '':
        # update your database
        id_from += 1
        my_list = []
    else:
        my_list.append(line)

答案 1 :(得分:0)

试试这个:

f = open('my_file.txt', 'r')
list1 = f.read().splitlines()

id_from = 1
for id_to in list1:
    if id_to == '':
        id_from += 1
        continue
    db1.execute('''INSERT INTO citations(
                    ID_from, ID_to) VALUES(%s,%s)''',
                    (id_from, id_to)) 
conn.commit()

您可以以更有效的方式使用您的SQL查询而不是这个。