簡體   English   中英

Python,存儲列表並將其插入表的一列

[英]Python, storing a list and inserting into one column of table

我正在讀取的文件格式如下:

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

我的猜測是我應該將我的execute查詢放入一個循環中,但是我不確定該循環應該包含什么。 我試圖用join函數將每個塊的值存儲在列表中的一行上,並用空格隔開,這會更簡單地插入到表中,但是我並沒有改變我的輸出。 我是python和mysql的新手,因此感謝您的反饋!

不看完整的代碼就很難推薦一些東西。 無論如何,我想這是因為您正在一個循環中逐行讀取文件,並且在每個循環中都在定義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)

嘗試這個:

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查詢,而不是這種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM