2017-07-26 35 views
1
import MySQLdb 

db = MySQLdb.connect(host="?", 
       user="root",   
       passwd="?", 
       db="test") 
cursor = db.cursor() 

file = open('...../EM.txt', 'r') 
file_content = file.read() 
file.close() 

query = "INSERT INTO EM VALUES (%s,%s,%s,%s,%s,%s)" 

cursor.execute(query, (file_content,)) 

db.commit() 
db.close() 

我試着從代碼中讀取文本文件並插入到EM表中......任何一個人都可以幫我做這項工作?從文本文件插入到mysql表中使用python

+1

您遇到什麼問題? – Tgsmith61591

回答

1

我不知道如何格式化您的文本文件,但file.read()爲您提供整個文件作爲單個字符串,它似乎有六個字段來填充。所以也許文件由6個製表符或空格分隔的字段組成?

首先,將文件拆分爲file.readlines()而不是file.read()。其次,建立行的列表,你可以喂到executemany

values = [line.split() for line in file_content] 
cursor.executemany(query, values) 

split方法按空白進行分割的文件中的行成一個元組,例如,串a b c變成元組('a', 'b', 'c'),使列表理解產生一個元組列表,這些元組可以輸入到cursor.executemany中執行批量插入。

由於@Evan所指出的,你還必須指定值在您的SQL查詢相關的列,例如,

INSERT INTO EM (field, spam, ham, eggs, price, ni) VALUES (%s, %s, %s, %s, %s, %s) 
2

您是否試圖將整個文本文件插入到數據庫的字符串列中,還是要將表格數據導入數據庫?看起來你想根據你指定值的方式導入表格數據,所以我會用它作爲我的假設。

要做到這一點,您需要讀取文件中的每一行,並將其一次一行地插入到數據庫中。您還需要更新查詢語法以指定要插入的列名稱。

import csv 
import MySQLdb 

db = MySQLdb.connect(host='localhost', 
    user='root', 
    passwd='?', 
    db='test') 
cursor = mydb.cursor() 

with open('...../EM.txt') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     cursor.execute("""INSERT INTO testcsv(col1, col2, col3, col4, col5, col6) 
          VALUES(%s, %s, %s, %s, %s, %s) 
         """, row) 

#close the connection to the database. 
mydb.commit() 
cursor.close() 
print "Done" 
+0

謝謝埃文它的工作原理,但它阻止了我這個錯誤「」錯誤的整數值:''2023''第1行'列'年「 –

+0

我編輯了響應,用參數替換SQL查詢中的字符串格式你可以嘗試使用該版本嗎?如果仍然無法工作,那麼有關列的數據類型的其他信息可能會有用。是否可能「2023」是該列的無效數據類型? – Evan

+0

我認爲如果你刪除了%s附近的引號,它應該可以工作,也許查詢插入的是文字值「2023」而不是2023.看看上面的最新編輯 – Evan

-1

爲了讓python與您的SQl數據庫進行通信,您必須使用適配器(如psycopg2)。一旦你安裝了psycopg2你必須導入它。另一個可以改善代碼簡單性和功能的細分市場是通過使用csv閱讀器。這可以通過簡單地導入csv來完成。 SQL數據庫存儲爲csv文件,因此使用這將幫助您在使用python時讀取csv文件。

你可以找到更多有關使用CSV閱讀這裏: https://docs.python.org/2/library/csv.html

在代碼方面的嘗試:

import MySQLdb 
import psycopg2 

db = MySQLdb.connect(host="?", 
       user="root",   
       passwd="?", 
       db="test") 
cursor = db.cursor() 

file = open('...../EM.txt', 'r') 
file_content = file.read() 
file.close() 

query = "INSERT INTO EM VALUES (%s,%s,%s,%s,%s,%s)" 

cursor.execute(query, (file_content,)) 

db.commit() 
db.close() 

通過安裝和進口psycopg2將允許蟒蛇瞭解SQL奎雷斯你試圖執行。

+0

你的代碼對'psycopg2'模塊沒有任何作用,[MySQLdb](http://mysql-python.sourceforge.net/MySQLdb.html)就足夠了。 –