2014-09-04 3 views
2

Я пытаюсь вернуть числовое значение из этого заявления:Python SQLite Возвращаемое значение

c = db.execute("""SELECT *, rowid FROM members WHERE barcode = '%s' AND debit > 0 LIMIT 50""" % (s,)) 

Но я получаю это как возвращаемое значение:

sqlite3.Cursor object at 0xb6cb2720 

Что я должен делать с этим курсором объект получить результаты?

+0

Вы пробовали перечислить 'c'? 'для строки в c: ...' – cdhowie

+2

'Чтобы извлечь данные после выполнения инструкции SELECT, вы можете либо обработать курсор как итератор, вызывать метод fetchone() курсора для извлечения одной подходящей строки, либо вызвать fetchall() для получения списка совпадающих строк. – roippi

ответ

2

Попробуйте это:

for row in c: 
    print row['rowid'] 
+0

Непосредственно перечисление 'c' вместо' c.fetchall() 'потребует меньше памяти, так как весь результирующий набор не загружается в память сразу, а каждая строка будет загружена по одному и отбрасывать до следующего. – cdhowie

+0

Обновлено. Спасибо за совет. Вот почему я люблю отвечать на вопросы о SO. Мой образ мышления валидирован или нет, и в любом случае я чему-то научился. – chishaku

+0

@cdhowie фактически SQLite не обязательно будет возвращать весь набор результатов, но он, безусловно, буферизирует некоторые из них в памяти, прежде чем возвращать следующий набор из транзакционного журнала на диске (если это не база данных в памяти) ... Но да, эффективнее, чем 'list''ing или' .fetchall''у результатов. –

0

Одна из моих проблем был, я использовал неверный запрос SQL, чтобы получить данные, которые я хотел. См:

c = db.execute("""SELECT "debit" FROM "members" WHERE "barcode" = '%s' LIMIT 1""" % (s,)) 

Я бы тогда получить ответ:

(0,) 

Что было то, что мне было нужно. Теперь, чтобы на самом деле разобраться, как его сравнить - мне нужно сказать «если c не равно (0), тогда напечатайте« cross »else print« tick »...»

Большое спасибо за помощь!

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