Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 26, 2006 16:14:54

Cyxapeff
От:
Зарегистрирован: 2006-08-17
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

Спасибо, но всё равно не работает. :(
На этот раз она почему-то решила, что я ей даю 19 параметров. о_О

('2006-10-25 00:00:00', ‘212.49.103.113’, ‘2984’, ‘6’, ‘195.133.54.30’, ‘6500’,
'514', ‘0’)
Traceback (most recent call last):
File “C:\python\parser.py”, line 63, in <module>
add_db(“test.db”, content)
File “C:\python\parser.py”, line 46, in add_db
cu.executemany(“”“INSERT INTO traffic VALUES (?, ?, ?, ?, ?, ?, ?, ?);”“”, line)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current sta
tement uses 8, and there are 19 supplied.



Офлайн

#2 Окт. 26, 2006 16:32:52

koder
От:
Зарегистрирован: 2006-09-29
Сообщения: 95
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

Блин - недосмотрел.

executemany принимает массив(кортеж,итератор) блоков параметров, после чего по очереди
форматирует запрос использую его элементы и исполняя результат. Например
cu.execute('insert into x values (1)')
cu.execute('insert into x values (1)')
cu.execute('insert into x values (1)')
эквивалентно
cu.executemany('insert into x values (?)',[] * 3)

Соответственно в твоем случае либа попыталось отформатировать запрос первым параметром -
'2006-10-25 00:00:00' - в нем 19 элементов(символов) - вот оно и матерится.

Тебе нужно написать или так:
cu.executemany(“”“INSERT INTO traffic VALUES (?, ?, ?, ?, ?, ?, ?, ?);”“”, (line,))
или так
cu.execute(“”“INSERT INTO traffic VALUES (?, ?, ?, ?, ?, ?, ?, ?);”“”, line)



Офлайн

#3 Окт. 26, 2006 16:48:53

Cyxapeff
От:
Зарегистрирован: 2006-08-17
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

О! Ну тогда ещё лучше. Спасибо.



Офлайн

#4 Янв. 10, 2010 05:32:20

rokki
От:
Зарегистрирован: 2009-09-22
Сообщения: 79
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

прошу помочь, тут какой то нюанс.
вот код и ошибка:

import csv, sqlite3

open_file=csv.reader(open('vopros.csv','rb'), delimiter=';')
conn=sqlite3.connect(database='Vopros')
conn.text_factory=str
c=conn.cursor()
try:
c.execute('''create table Vopros
(vopr, otv1, otv2, otv3, otv4)''')
except sqlite3.DatabaseError, x:
print ‘Ошибка: ’, x
conn.commit()

for row in open_file:
c.execute('insert into Vopros values (?,?,?,?,?)',row)
conn.commit()
conn.close()


Traceback (most recent call last):
File “G:\тестирование\baza_vopros.py”, line 23, in <module>
t=c.execute('insert into Vopros values (?,?,?,?,?)',row)
ProgrammingError: Incorrect number of bindings supplied. The current statement uses 5, and there are 49 supplied.

в настройках csv-файла разделитель стоит ‘;’.Получается я пробегаю не по столбцам, а только по первой записи.



Офлайн

#5 Янв. 10, 2010 11:06:33

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Вопросы по sqlite

rokki
Получается я пробегаю не по столбцам, а только по первой записи.
Нет. Получается, что у тебя либо разделителей полей больше, чем ты рассчитываешь получить, либо в качестве разделителя строк используется что-то непонятное.

Note: The reader is hard-coded to recognise either ‘\r’ or ‘\n’ as end-of-line, and ignores lineterminator. This behavior may change in the future.

Кусок текстового файла давай и проверь его кодировку.



Офлайн

#6 Янв. 10, 2010 15:44:47

rokki
От:
Зарегистрирован: 2009-09-22
Сообщения: 79
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

все верно, у меня разделитель \n. Текстовый файл получил таким способом:

vopros=[['''Считая, что каждый символ кодируется 2 байтами,\nоцените информационный объем в кодировке  Unicode:\nМой дядя самых честных правил, Когда не в шутку занемог,\nОн уважать себя заставил И лучше выдумать не мог''',['108 бит','832 бит','108 килобайт','864 килобайт']],
['''Считая, что каждый символ кодируется 2 байтами,\nоцените информационный объем в кодировке Unicode:\nОдин пуд - около 16,4 килограмм.''',['32 килобайта','512 бит','64 бита','32 байта']],
['''Считая, что каждый символ кодируется 1 байтом\nоцените информационный объем предложения:\nПевец-Давид был ростом мал, Но повалил же Голиафа!''',['400 бит','50 бит','400 байт','5 байт']],
['''Считая, что каждый символ кодируется 1 байтом,\nоцените информационный объем предложения:\nВ одном килограмме - 1000 грамм.''',['16 килобайт','256 бит','32 байта','16 байт']],
['''Световое табло состоит из лампочек, каждая из которых\nможет находиться в 2 состояниях("вкл" или "выкл").\nКакое наименьшее количество лампочек должно находиться\nна табло, чтобы с его помощью можно было передать\n200 различных сигналов?''',['8','9','100','200']],
['''Шахматная доска состоит из 64 полей:8 строк на 8 столбцов.\nКакое минимальное количество бит потребуется\nдля кодирования координат одного поля?''',['4','5','6','7']],
['''Сколько существует различных последовательностей из символов\n"а" и "б" длиной ровно в 10\nсимволов?''',['20','100','1024','2048']],
['''Сколько существует различных последовательностей из символов\n"+" и "-" длиной ровно в 5 символов?''',['64','50','32','20']],
['''В зрительном зале 2 прямоугольные области зрительских кресел:\nодна 10 на 12, а другая 17 на 8. Какое минимальное количество\nбит потребуется для кодирования каждого места в\nавтоматизированной системе?''',['5','6','7','8']],
['''Азбука Морзе позволяет кодировать символы для радиосвязи,задавая\nкомбинацию точек и тире. Сколько различных символов можно закодировать,\nиспользуя код Морзе длиной не менее 3\nи не более 5 сигналов(точек и тире)?''',['12','56','84','256']],
['''Сколько мегабайт информации содержит сообщение объемом 223 бит?\n \n''',['1','8','3','32']],
['''Получено сообщение, информационный объем которого равен 32 бит.\nЧему равен этот объем в байтах?''',['5','2','3','4']],
['''Для 5 букв латинского алфавита заданы их двоичные коды\n(для некоторых букв из двух бит, для некоторых-из трех).\nA-000, B-01, С-100, D-10, E-011.Определить, какой набор букв\nзакодирован двоичной строкой 0110100011000.''',['EBCEA','BDDEA','BDCEA','EBAEA']],
['''Для кодирования букв А, Б, В, Г решили использовать двухразрядные\nпоследовательные двоичные числа(от 00 до 11 соответственно).\nЕсли таким способом закодировать аоследовательность символов ГБАВ\nи перевести результат в шестнадцатиричную систему счислен\nто получится:''',['D2','132','3102','DBAC']],
['''Каждое показание датчика, фиксируемое в памяти компьютера, занимает\n10 бит.Запмсано 100 показаний этого счетчика. Каков информационный\nобъем снятых значений в байтах?''',['10','100','125','1000']],
['Количество значащих нулей в двоичной записи числа 129 равно:',['5','6','7','4']],
['Как представляется число 25 в двоичной системе счисления?',['1001','11001','10011','11010']],
['Как представлено число 83 в двоичной системе счисления?',['1001011','1100101','1010011','101001']],
['''Вычислите значение суммы в десятичной системе счисления\n(в скобках указано основание системы счисления):\n10(2)+10(8)+10(16)=?(10)''',['30','26','36','20']],
['''Вычислите сумму чисел x и y, если x=1110101(2),у=1011011(2).\nРезультат представьте в виде восьмеричного числа.\n(в скобках указано основание системы счисления)''',['2110(8)','298(8)','320(8)','318(8)']],
['''Вычислите сумму двоичных чисел х и у, если\nх=1010101(2), у=1010011(2)\n(в скобках указано основание системы счисления).''',['10100010(2)','10101000(2)','10100100(2)','10111000(2)']],
['''Вычислите сумму чисел x и y при x=В4(16),у=46(8).\nРезультат представьте в двоичной системе счисления.\n(в скобках указано основание системы счисления)''',['10001111(2)','1100101(2)','101011(2)','1010111(2)']],
['''Вычислите сумму чисел x и y при x=1D(16),у=72(8).\nРезультат представьте в двоичной системе счисления.\n(в скобках указано основание системы счисления)''',['10001111(2)','1100101(2)','101011(2)','1010111(2)']]
]

writer=csv.writer(open('vopros.csv','wb'))
writer.writerows(vopros)
кодировка utf-8.Но почему то вместо 23 полей в файле 11.
всю ночь не мог уснуть



Отредактировано (Янв. 10, 2010 19:51:23)

Офлайн

#7 Янв. 10, 2010 18:30:12

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Вопросы по sqlite

Я, конечно, понимаю девиз “через тернии к звездам”, но зачем же выдавать сюда скрипт, который файл делает вместо обычного файла? ;)

1. Посмотрите файл, он имеет структуру, которая отличается от ожидаемой вами. Мало того, что разделитель у вас ожидается точка с запятой, а в файле запятая, так еще и 2-й элемент списка (ответы) записывается кодами.
2. В исходном тексте у вас есть символ новой строки - \n. CSV-ридеру это очень не понравится, гарантирую :)

Вот вам пример записи в файл, учитывая вышенаписанное и пример, сделайте правильный импорт.

writer=csv.writer(open('vopros.csv','wb'), delimiter=';')
for item in vopros:
writer.writerow((item[0].replace('\n', '###'), item[1][0], item[1][1], item[1][2], item[1][3]))



Офлайн

#8 Янв. 10, 2010 19:38:28

rokki
От:
Зарегистрирован: 2009-09-22
Сообщения: 79
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

Lexander
Я, конечно, понимаю девиз “через тернии к звездам”
знал бы кинул бы файл, а показал как смог. А девиз “кто ищет тот найдет”. Спасибо за пример, пойду посмотрю, через “год” напишу. И еще “терпение и труд все перетрут” ;)



Офлайн

#9 Янв. 10, 2010 22:42:29

rokki
От:
Зарегистрирован: 2009-09-22
Сообщения: 79
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

Оставляю csv до лучших времен, что то опять не получается, а спать второй день хочется.
Спасибо за помощь, друзья



Офлайн

#10 Янв. 13, 2010 15:51:02

rokki
От:
Зарегистрирован: 2009-09-22
Сообщения: 79
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по sqlite

помогите, вот такой вопрос:

while p<100:
db.execute('select vopros from Vopros where num=" "')
как выполнить запрос чтобы в значение num вставить значение переменной р



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version