У меня проблема при попытке просто выполнить данные из строк из db (sqlite3). Вход БД имеет 4 поля, поэтому после ввода они сохраняются. Но вот моя проблема, когда я выполняю все 4 строки, если одно из полей не было заполнено, я получаю сообщение об ошибке.
Это код выполнения базы данных:
def ids(self):
con = lite.connect('foo.db')
with con:
cur = con.cursor()
cur.execute("SELECT Id FROM foo")
while True:
ids = cur.fetchall()
if ids == None:
continue
return ids
И поскольку есть 4 строки, мой выходной код:
print ''.join(ids[0]) + ',' + ''.join(ids[1]) + ',' + ''.join(ids[2])
+ ',' + ''.join(ids[3])
Итак, мой вопрос в том, как сделать исключение, когда нет существующей строки, чтобы ничего не отображать, и просто оставить те, которые действительно существуют? Я пробовал использовать if ids[0] is not None: #do something
, но это сделало бы мой код очень медленным, и я думаю, это не питонический путь. Есть ли лучший способ заставить это работать? Любая помощь будет оценена по достоинству.
1 ответ
Кажется, у вас нет 4-х рядов. Сделайте его общим и просто присоедините произвольное количество строк:
ids = someobject.ids()
print ','.join(''.join(row) for row in ids)
Вы можете упростить запрос к базе данных, нет необходимости «опрашивать» запрос:
def ids(self):
with lite.connect('foo.db') as con:
cur = con.cursor()
cur.execute("SELECT Id FROM foo")
return cur.fetchall()
Вы также можете просто зацикливаться непосредственно на курсоре, база данных будет обрабатывать буферизацию при извлечении:
def ids(self):
with lite.connect('foo.db') as con:
cur = con.cursor()
cur.execute("SELECT Id FROM foo")
return cur # just the cursor, no fetching
ids = someobject.ids()
# this'll loop over the cursor, which yields rows as required
print ','.join(''.join(row) for row in ids)
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.
while True
? Нет необходимости повторять вызовfetchall
.return cur.fetchall()
подойдет.