本人第一次接触数据库, 许多操作还不熟练, 遇到一点疑惑如下:
使用的python
版本为3.6
先上代码:
import sqlite3
from pathlib import Path
def open_db():
root = Path(__file__).parent.parent
db_path = str(root / 'db/data.sqlite')
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
return conn, cursor
def close_db(conn, cursor):
conn.commit()
cursor.close()
conn.close()
class User:
def __init__(self, form):
self.username = form.get('username', '')
self.password = form.get('password', '')
@classmethod
def add(cls, user):
conn, cursor = open_db()
sql_insert = """
INSERT INTO
User(xxx)
VALUES
(xxx);
"""
conn.execute(sql_insert)
close_db(conn, cursor)
@classmethod
def update(cls, id, password):
conn, cursor = open_db()
sql_update = """
UPDATE
`User`
SET
`email`=?
WHERE
`id`=?
"""
conn.execute(sql_update, (id, password))
close_db(conn, cursor)
有两个函数open_db
和close_db
分别用来打开和关闭数据库, User
类有两个类方法add
和update
, 用来增加记录和更新记录. 现在的问题在于, 我每写一个有关数据库操作的方法就需要调用一次非常麻烦, 请问有没有更加简单的方法进行操作?
本人第一接触数据库方面知识, 若有不足, 还请见谅. 真诚希望各位前辈能解答, 不胜感激!
这个问题放了几天了好像也没有前辈解答, 我就自己回答一下吧, 解答方案可能存在错误, 也请前辈及时指出
1, 用
with
文档里面说:
大概就是说连接的数据库对象可以作为上下文管理器进行自动提交或者回滚, 所以代码大致如下:
当然也可以自己写一个上下文管理器, 如下:
2, 用装饰器
其实我不知道这个是不是一个好办法, 也很少看到有人这么做, 不过好像也可以用, 代码如下:
Reference: