Я думал, что я попытаюсь сделать свое соединение базы данных sqlite функцией вместо того, чтобы копировать / вставлять ~ 6 строк, необходимых для соединения и выполнения запроса повсеместно.Я хотел бы сделать его универсальным, чтобы я мог использовать ту же функцию для создания / выбора / вставки / и т.д ...
Ниже я попробовал следующее.Запросы 'INSERT' и 'CREATE TABLE' работают, но если я делаю запрос 'SELECT', как я могу работать со значениями, которые он выбирает за пределами функции?
Обычно я хотел бы напечатать значениявыбирает, а также делает с ними другие вещи.
Когда я делаю это, как показано ниже, я получаю ошибку
Traceback (most recent call last):
File "C:\Users\steini\Desktop\py\database\test3.py", line 15, in <module>
for row in connection('testdb45.db', "select * from users"):
ProgrammingError: Cannot operate on a closed database.
Итак, я предполагаю, что соединение должно быть открыто, чтобы я мог получить значения из курсора, но мне нужно закрыть еготак что файл не всегда заблокирован.
Вот мой тестовый код:
import sqlite3
def connection (db, arg, cubby):
conn = sqlite3.connect(db)
conn.execute('pragma foreign_keys = on')
cur = conn.cursor()
cur.execute(arg)
for row in cur:
cubby.append(row)
conn.commit()
conn.close()
cubby=[]
connection('testdb.db', "create table users ('user', 'email')", cubby)
connection('testdb.db', "insert into users ('user', 'email') values ('joey', 'foo@bar')", cubby)
for row in connection('testdb45.db', "select * from users", cubby):
print row
Как я могу сделать эту работу?
РЕДАКТИРОВАТЬ: немного изменил код такзначения cur, поэтому он добавляется во внешний список, но все еще довольно плохо