我有一个带有Tkinter的python脚本,我想在后台打印Sqlite中的每个查询(只是为了好玩):
我有一个数据库对象:
import sqlite3
class Database():
def __init__(self):
try:
sqlite3.enable_callback_tracebacks(True)
self.connection = sqlite3.connect('databases.sqlite')
self.cursor = self.connection.cursor()
self.cursor.execute( """ CREATE TABLE .... """ )
except:
print('error in database connection')
def __del__(self):
self.cursor.close()和一个任务对象
class Task():
def __init__(self, name="no_name"):
self.database = Database()
data = {"name" : name }
self.database.cursor.execute("INSERT INTO tasks(name) VALUES(:name)" , data )
self.database.connection.commit()当我完成这个new_task = Task('Hello')时,我希望在CLI中有一个自动输出:
* executed in 4ms :
INSERT INTO tasks (name) VALUES('Hello');有什么想法吗?提前谢谢你!
发布于 2016-05-13 12:48:35
这就是你要找的吗?我想过用装饰器,某种stopwatch
import time
def stopwatch(func):
def wrapper(*args,**kwargs):
start = time.time()
func(*args,**kwargs)
end = time.time()
timed = int((end - start)*1000)
print(timed)
return wrapper但后来我想到了上下文经理,也许(我不是合适的人)更适合这类工作。从这里借用代码,我最终得到了(哈哈)这个:
class Timer:
def __enter__(self):
self.start = time.clock()
return self
def __exit__(self, *args):
self.end = time.clock()
# format as milliseconds
self.interval = int((self.end - self.start) * 1000)
class Task():
def __init__(self, name="no_name"):
data = {"name" : name }
sql_template = "INSERT INTO tasks(name) VALUES(:name)"
# do the database thingy inside the Timer context
with Timer() as t:
self.database = Database()
self.database.cursor.execute(sql_template, data)
self.database.connection.commit()
print("* executed in {}ms :".format(t.interval))
print(" {}".format(sql_template))我已经对它进行了一些测试,但是将它应用到您的情况中,我可能会犯一些错误,因为我必须稍微修改一下Task __init__,才能重用SQL命令。1:http://preshing.com/20110924/timing-your-code-using-pythons-with-statement/
https://stackoverflow.com/questions/37209455
复制相似问题