import pymysql
import contextlib
@contextlib.contextmanager
def get_cursor():
"""获取数据库光标"""
db_settings = {
'host': '',
'user': '',
'password': '',
'database': '',
'charset': 'utf8',
'cursorclass': pymysql.cursors.DictCursor
}
try:
conn = pymysql.connect(**db_settings)
# 使用yield不但能够返回cursor
# 而且cursor使用完毕后还会回到下一行继续执行
# 这样数据库就能关闭!
yield conn.cursor()
conn.commit()
except:
conn.rollback()
raise
finally:
conn.close()
with db.get_cursor() as cursor:
sql = ''
cursor.execute(sql)
rows = cursor.fetchall()
ss = []
for r in rows:
s = Subject()
for key in r:
setattr(s, key, r[key])
ss.append(s)
return ss