概述
Python 内置了 sqlite3 模块,可以方便地调用 SQLite 数据库。
import sqlite3
conn = sqlite3.connect('test.db')
cur = conn.cursor()
cur.execute('CREATE TABLE students (id BIGINT PRIMARY KEY NOT NULL, name VARCHAR(10) NOT NULL)')
conn.commit()
cur.close()
conn.close()
以上代码有一个问题,就是如果出现异常,那么,数据库不会关闭,所以,更完善的写法如下:
import sqlite3
conn = sqlite3.connect('test.db')
try:
cur = conn.cursor()
cur.execute('CREATE TABLE students (id BIGINT PRIMARY KEY NOT NULL, name VARCHAR(10) NOT NULL)')
conn.commit()
except (sqlite3.Warning, sqlite3.Error) as e:
print(e)
exit(1)
finally:
cur.close()
conn.close()
但是,这么写不免有些繁琐,我们知道, Python 里面有个with ... as ... 语句可以简化代码:
with open('example.txt') as f:
pass
我们也可以自己实现一个支持 with 语句的类!首先,我们来了解一下 with 语句的原理。只要是实现了 __enter__ 和 __exit__ 方法的对象,都可以使用 with 语句,请看下面的例子:
class Example(object):
def __init__(self):
print('__init__被调用')
self.label = '这是一个示例对象'
def __enter__(self):
print('__enter__被调用')
return self.label
def __exit__(self, type_, value, traceback):
print('__exit__被调用')
print(type_, value, traceback)
return True
with Example() as obj:
print(obj)
with Example() as obj:
raise RuntimeError('引发异常')
print('程序正常结束')
输出结果如下:
__init__被调用
__enter__被调用
这是一个示例对象
__exit__被调用
None None None
__init__被调用
__enter__被调用
__exit__被调用
引发异常
程序正常结束
我们来把逻辑捋顺:首先,with 语句执行 Example(),这个过程调用的是 __init__,接着执行的是 __enter__,Python 会把这个方法的返回值赋值给 obj,当程序离开 with 代码块,或者中途有异常抛出,就会执行 __exit__ 方法,如果该方法返回 True,异常将会被抑制。__exit__ 方法有三个参数,分别对应异常类型,异常描述和异常栈。如果没有异常,这三个参数都将是 None。
明白了这些,我们就可以封装一个属于我们自己的数据库操作类了。
import sqlite3
class Sqlite(object):
def __init__(self, filename):
self.conn = sqlite3.connect(filename)
self.cur = self.conn.cursor()
def __enter__(self):
return self
def __exit__(self, exectype, value, traceback):
self.cur.close()
self.conn.close()
def execute(self, command):
self.cur.execute(command)
self.conn.commit()
with Sqlite('test.db') as db:
db.execute('CREATE TABLE students (id BIGINT PRIMARY KEY NOT NULL, name VARCHAR(10) NOT NULL)')
最后
以上就是活力汽车为你收集整理的python 语法糖太多_带有语法糖的Python,with的全部内容,希望文章能够帮你解决python 语法糖太多_带有语法糖的Python,with所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复