2016-03-02 4 views
0

Это привело меня в сумасшествие на два дня. Я пытаюсь добавить 2d-список в базу данных mysql. Мой код выглядит следующим образом:Добавление списка в базу данных mysql

import MySQLdb as mdb 

i = 0 
ins = open("test.txt", "r") 
skeds = [] 
for line in ins: 
    i = i + 1 
    line = line.replace(",", "") 
    #line = line.replace('""', "") 
    line = line.replace("\xc2\xa0", "EMPTY") 
    line = line.replace("\xef\xbb\xbf", "") 
    line = line.strip() 
    line = line.strip().upper() 
    line = line.split('""') 
    line = filter(None, line) 
    skeds.append(line) 

del skeds[i-1] 
print(skeds[277]) 

con = mdb.connect('localhost', 'testuser', 'test123', 'sked') 

with con: 
#AT this point sked = ['WATCH', 'VT-X', 'EMPTY', '10:30', '15:00', 'EMPTY', 'DOE JON [1XX]', 'PM SDO', '4.5', 'EMPTY', 'EMPTY'] 
    cur = con.cursor() 
    cur.execute("DROP TABLE IF EXISTS test3") 
    cur.execute("CREATE TABLE test3(Type VARCHAR(50), VT VARCHAR(50), Brief VARCHAR(50), EDT VARCHAR(50), RTB VARCHAR(50), Instructor VARCHAR(50), Student VARCHAR(50), Event VARCHAR(50), Hrs VARCHAR(50), Remarks VARCHAR(75), Location VARCHAR(50))") 


params = "INSERT INTO test3(Type, VT, Brief, EDT, RTB, Instructor, Student, Event, Hrs, Remarks, Location) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" 
dats = skeds[36] 

cur.executemany(params, dats) 

Ниже то, что я получаю за ошибки:

smartsked Main$ python sked1.py 
['WATCH', 'VT-9', 'EMPTY', '10:30', '15:00', 'EMPTY', 'SENG PATRICK [1STLT]', 'PM SDO', '4.5', 'EMPTY', 'EMPTY'] 
Traceback (most recent call last): 
    File "sked1.py", line 36, in <module> 
    cur.executemany(params, dats) 
    File "/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.11-x86_64.egg/MySQLdb/cursors.py", line 244, in executemany 
    self.errorhandler(self, ProgrammingError, msg.args[0]) 
    File "/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.11-x86_64.egg/MySQLdb/connections.py", line 36, in defaulterrorhandler 
raise errorclass, errorvalue 
_mysql_exceptions.ProgrammingError: not enough arguments for format string 

Есть предложения? Я также хотел бы повторить функцию executeemany по длине списка skeds, чтобы иметь полный список 2d, помещенный в базу данных.

+1

Вы напечатали скаты [277], но вы пытаетесь вставить скаты [36]. Что это значит? –

+0

Вы уверены, что наклеены соответствующим отступом? Причина 'skeds.append (строка)' только собирается добавить одну строку, которую вы быстро удалите, а следующая строка будет ошибкой. Так что я догадываюсь, нет? –

+0

@ DanielRoseman - Оба ската [277] и skeds [36] содержат одинаковый объем информации только по разным строкам. Вы можете распечатать распечатку для композиций [277] в распечатке ошибок. [36] то же самое с разными строками. – exos

ответ

0

Проблема была связана с форматированием данных. Мой список непреднамеренно имел 2x данных, как ожидалось.

Смежные вопросы