我正在使用python腳本將文本文件導入到mysql數據庫,但我得到一個奇怪的錯誤並通過互聯網搜索它,但無法找到確切的解決方案。我想創建列和某些列將與負號保存在十進制數據這樣TypeError:在使用MySQL和Python進行字符串格式化時轉換的並非所有參數
Alarmdata fuAlarm
-1585.4 -35.3
-343.32 -54.3
我收到以下錯誤
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near ' Alarmdata,
fuel_in_l DECIMAL(5,2), fuAlarm DECIMAL(4,3), ' at line 1")
我通過給數據類型爲空白的數據,但現在解決了這個問題我正面臨這個錯誤。
TypeError: not all arguments converted during string formatting
我的代碼如下
import os
import sys
import csv
import MySQLdb as mdb
con = mdb.connect('localhost' , 'root' , 'kami' , 'tempdat')
cursor = con.cursor()
cursor.execute('CREATE TABLE Datatmp (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, \
timestamp INT(12), pomode INT(3), modeAlarm INT(3), \
temperature_C DECIMAL(2,1), temperatureAlarm INT(3), \
switch INT(3), Powerswitch INT(3), SIM_dollar INT , \
Alarmdata INT, fuel_in_l DECIMAL(5,2), fuAlarm DECIMAL(4,3), \
next_maint DECIMAL(5,2), next_maintenanceAlarm INT(2))');
con.commit()
file = open('//home/mysql/kami.txt', 'rb')
creader = csv.reader(txtfile.readlines()[3:], delimiter='\t')
for t in creader:
cursor.execute('INSERT INTO Datatmp(timestamp, pomode, modeAlarm,\
temperature_C, temperatureAlarm, \
switch, Powerswitch, SIM_dollar, \
Alarmdata, fuel_in_l, fuAlarm \
next_maint, next_maintenanceAlarm)\
Values(%s,%s,%s,%s,%s,%s,NULL,NULL,%s,%s,%s,\
%s,%s,%s,%s,%s,%s)', t)
file.close()
con.commit()
con.close()
類錯誤是說我沒有通過足夠%S,但我通過相同的號碼,它不應該顯示此錯誤。我是MySQL和python的新手,所以我沒有解決。
在您的表格定義中,您沒有Alarmdata的數據類型 – Niagaradad
@Niagaradad是的,那裏我不知道。如果該列在表中,但沒有數據,則只是空白。那麼我應該顯示哪種數據類型? NULL還是INT?第二,如果我有價值像-152.43,我該如何分配這種數據類型? 。如果有任何提示,我會非常感激。我花了整整一天的時間。 – Rio
OP - 一個社區wiki被添加爲您最後一個陳述的答案,但沒有任何意義。 Python的* Nones *在MySQL中被翻譯爲* Nulls *。此外,您的附加查詢缺少逗號,並且傳入的列表字段的佔位符太多。未來的讀者可能會對你發現的內容感興趣。請使用示例代碼調整完全回答您自己的問題。 – Parfait