[英]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.