編寫一個腳本來爲MySQL導入轉換原始數據我使用了一個臨時文本文件,我稍後使用LOAD DATA INFILE ...命令手動導入。快速MySQL導入
現在我包括導入命令進入python腳本:
db = mysql.connector.connect(user='root', password='root',
host='localhost',
database='myDB')
cursor = db.cursor()
query = """
LOAD DATA INFILE 'temp.txt' INTO TABLE myDB.values
FIELDS TERMINATED BY ',' LINES TERMINATED BY ';';
"""
cursor.execute(query)
cursor.close()
db.commit()
db.close()
這工作,但TEMP.TXT必須是在不適合我的需要的數據庫目錄。
下一頁計算策略傾銷文件,並直接commiting:
db = mysql.connector.connect(user='root', password='root',
host='localhost',
database='myDB')
sql = "INSERT INTO values(`timestamp`,`id`,`value`,`status`) VALUES(%s,%s,%s,%s)"
cursor=db.cursor()
for line in lines:
mode, year, julian, time, *values = line.split(",")
del values[5]
date = datetime.strptime(year+julian, "%Y%j").strftime("%Y-%m-%d")
time = datetime.strptime(time.rjust(4, "0"), "%H%M").strftime("%H:%M:%S")
timestamp = "%s %s" % (date, time)
for i, value in enumerate(values[:20], 1):
args = (timestamp,str(i+28),value, mode)
cursor.execute(sql,args)
db.commit()
作品很好,但需要大約四倍長,這實在是太多了。 (在第一個版本中使用相同的結構來生成temp.txt)
我的結論是我需要一個文件,並且LOAD DATA INFILE命令更快。要放置文本文件的位置,LOCAL選項似乎很有用。但與MySQL連接器(1.1.7)有已知的錯誤: mysql.connector.errors.ProgrammingError:1148(42000):使用的命令是不允許與此MySQL版本
到目前爲止,我已經看到使用MySQLdb而不是MySQL Connector可能是一種解決方法。 MySQLdb上的活動似乎很低,而且Python 3.3的支持可能永遠不會到來。
是LOAD DATA LOCAL INFILE要走的路,如果有的話,是否有可用於python 3.3的工作連接器?
編輯:開發後數據庫將運行在服務器上,客戶端上的腳本。
這適用於當前的設置與本地數據庫中的每個訪問的文件使用
LOAD DATA INFILE
。數據庫很快就會遷移到服務器上(忘記提及這一點)。我猜,本地文件會更容易。 –如果您可以將文件上傳到服務器,然後在服務器上運行python,那將是最快的。我想用LOCAL是最好的,但我不能評論python連接器 –