Найти - Пользователи
Полная версия: c=db.cursor() как определить кол-во записей?
Начало » Базы данных » c=db.cursor() как определить кол-во записей?
1 2
qman
есть код
c=db.cursor()
c.execute('use archive')
c.execute('Mail_Warning')
while (c.fetchone() <> ''):
t = c.fetchone()
print “%s %s %s %s %s %s\n”%(t,t, t, t, t, t)
db.close()

как красиво сделать перебор всех записей (record) в переменной c?
как узнать их кол-во?
БД MSSQL платформа WIN.
j2a

curs = conn.cursor()
curs.execute('SELECT foo, bar FROM baz')
print “We will fetch %d records” % curs.rowcount
for i, rec in enumerate(curs.fetchall()):
print “rec %d: %s” % (i+1, rec)
slivlen
qman
while (c.fetchone() <> ''):
    t = c.fetchone()
    print "%s %s %s %s %s %s\n"%(t[0],t[1], t[2], t[3], t[4], t[5])
Этот код распечатает только половину строк из результата выборки, тк вызов fetchone каждый раз возвращает очередную строку из результирующего множества.

Пример j2a тоже не самый удачный. Во-первых, в случае если в выборке будет очень много записей, то полное их извлечение за раз может съесть достаточно много оперативки, а во-вторых если кол-во выбранных записей будет > чем значение arraysize курсора, то будет, соответственно, получено не все результирующее множество,

Я обычно пользуюсь такой конструкцией:
row = curs.fetchone()
while(row):
   ...
   row = curs.fetchone()

Или такой(когда не удобно обращаться к колонкам по номерам):
def fetchone_dict(c):
    res_dict = {}
    res_tuple = c.fetchone()
    if not res_tuple:
        return res_tuple
    for i, col_val in enumerate(res_tuple):
        res_dict[c.description[i][0]] = col_val
    return res_dict
...
row = fetchone_dict(curs)
while(row):
   print row['col1'], row['col2']
   ...
   row = fetchone_dict(curs)
balu
qman
как узнать их кол-во?
На всякий случай универсальный способ
select count(*) from TABLE
slivlen
balu, это вернет кол-во записей в таблице, а не в выборке.
slav0nic
всем 2 =) или я не понял вопроса



print cursor.rowcount



пардон, у j2a таки было в коде) не заметил
balu
slivlen
balu, это вернет кол-во записей в таблице, а не в выборке.
select count(*) from TABLE where mainkey > 1
slav0nic
всем 2 ;) или я не понял вопроса
Твой вариант только для Python-DBAPI. Мой для SQL-92 ;)
slivlen
slav0nic
всем 2 smile или я не понял вопроса
Правильно понял, но их там 2 :)
slivlen
balu
Твой вариант только для Python-DBAPI. Мой для SQL-92 wink
А если в запросе будет GROUP BY или выборка будет из 10 таблиц? :)
balu
slivlen
А если в запросе будет GROUP BY или выборка будет из 10 таблиц?
SELECT count (*) FROM (SELECT * FROM TABLE…)

Явный минус тогда - запрос придется делать дважды. Тогда для python лучшее решение - cursor.rowcount(). Можно также поиграться с курсорами на уровне СУБД, но это не все СУБД умеют.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB