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 語法糖
匿名函式 lamda表示式 def add x,y return x y 等價於f lamda x,y x y f 1,2 三元表示式 wefx 1 y 2 c x if x map對映關係 def square x return x x list x 1,3,10 list r map squar...
Python語法糖介紹
作為一門優秀的指令碼語言,python在語法層面提供了很多好玩又實用的語法,俗稱語法糖,正確的使用這些技巧能讓 看起來更優雅,更pythonic,這裡列舉幾個。usr bin env python3 defmain animals cat dog bird pig if dog in animals...
Python中語法糖及帶參語法糖
在python中,符號常被稱作語法糖 裝飾器 在某函式定義時,用以包裝該函式,以達到擷取,控制該函式的目的。def d f print d.k f 此處保留了傳進來的原函式 f def f x return k x 2 return f 此處不能寫成f x f是函式控制代碼,如果帶 則呼叫,這裡只返...