首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Sqlit&Python打印每个查询

用Sqlit&Python打印每个查询
EN

Stack Overflow用户
提问于 2016-05-13 11:55:34
回答 1查看 1.1K关注 0票数 0

我有一个带有Tkinter的python脚本,我想在后台打印Sqlite中的每个查询(只是为了好玩):

我有一个数据库对象:

代码语言:javascript
复制
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()

和一个任务对象

代码语言:javascript
复制
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中有一个自动输出:

代码语言:javascript
复制
* executed in 4ms :
    INSERT INTO tasks (name) VALUES('Hello');

有什么想法吗?提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-13 12:48:35

这就是你要找的吗?我想过用装饰器,某种stopwatch

代码语言:javascript
复制
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

但后来我想到了上下文经理,也许(我不是合适的人)更适合这类工作。从这里借用代码,我最终得到了(哈哈)这个:

代码语言:javascript
复制
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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37209455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档