Как получить запрашиваемые результаты с Python / SQLite? - PullRequest
2 голосов
/ 10 сентября 2010

Я использую Python / SQLite для доступа к базе данных. После выполнения запроса и получения результата я хочу узнать количество строк, количество столбцов и имя столбца из запрашиваемого результата и базы данных.

Например, если я запускаю «SELECT * from table» и получаю

id    name    number
--------------------
1     John    10
2     Jay     20

Могу ли я узнать, что у меня есть 2 строки и 3 столбца, а количество столбцов равно id / name / number?

ДОБАВЛЕНО

Основываясь на ответе Рафаэля СДМ Сьерра, я мог получить информацию следующим образом.

    description = self.cursor.description
    qr.numberOfCol = len(description) <-- # of column
    for item in description:
        qr.names.append(item[0]) <-- Names of column

    count = 0
    for row in self.cursor:
        count += 1
        qr.result.append(row)

    qr.numberOfRow = count <-- # of row

Ответы [ 2 ]

3 голосов
/ 10 сентября 2010

SQLite3 для Python не поддерживает атрибут .rowcount и возвращает всегда -1.

Но чтобы узнать, какие столбцы вы можете использовать атрибут .description.

>>> import sqlite3
>>> c = sqlite3.connect(':memory:')
>>> c.execute('CREATE table foo (bar int, baz int)')
<sqlite3.Cursor object at 0xb76e49e0>
>>> c.execute('insert into foo values (1,1)')
<sqlite3.Cursor object at 0xb778c410>
>>> c.execute('insert into foo values (2,2)')
<sqlite3.Cursor object at 0xb76e4e30>
>>> c.execute('insert into foo values (3,3)')
<sqlite3.Cursor object at 0xb778c410>
>>> cursor = c.execute('select * from foo')
>>> cursor.rowcount
-1
>>> cursor.fetchone()
(1, 1)
>>> cursor.description
(('bar', None, None, None, None, None, None), ('baz', None, None, None, None, None, None))
>>> 

Подробнее об атрибуте .description смотрите здесь: http://www.python.org/dev/peps/pep-0249/

1 голос
/ 19 июня 2014

Поскольку cursor.rowcount не работает, вам придется вернуть счет и извлечь число, используя result = cursor.execute('select count(*) from the_table') print "rowcount = ",result.fetchone()[0]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...