文章目录[隐藏]
老物搬运23333
基于python实现的sqlite队列,方便的处理sqlite并发。并且包含一个十分简洁好用的SQL语句包装。
认真的讲,我真的不会python。这个库纯粹是因为一时兴起外加一个小脑洞。而且大部分代码都是在手机的QPython上完成的,于是质量可想而知(不过我尽量都改掉了QAQ)。
一个简单的队列可以在两行代码实现。
import sqlite_queue
queue = sqlite_queue.SqliteQueue('test.db')
queue.start()
以下是一个完整的示例:
import sqlite_queue
queue = sqlite_queue.SqliteQueue('test.db')
queue.setDaemon(False) # 默认为守护线程
queue.start()
# 测试INSERT
for i in range(12,15):
queue.register_execute("INSERT INTO stocks VALUES ('2017-02-04','BUY','RHAT',?,35.14)", (i,)
, callback=lambda lst_row, data: print(lst_row))
# 测试SELECT
queue.register_execute("SELECT * FROM stocks", callback=lambda lst_row, data: print(data))
# 包装SQL语句SELECT
queue.select('stocks').where('price', '>=', 30) \
.order('price').page(1, 5)\
.register(callback=lambda lst_row, data: print(data))
其实神奇的用法还有一些,尤其是关于SQL语句的包装,示例位于example/sql_builder.py。这里节选一些好了:
# INSERT语句
queue.insert('stocks')\
.data({'trans': 'BUY', 'symbol': 'RHAT', 'price': 35.14, 'qty': 100, 'date': '2017-01-01'}).register()
# 两种不同写法的SELECT语句
queue.select('stocks').where('price', '>=', 30).where('trans', ['BUY', 'SELL'])\
.where('date', '><', ['2017-02-01', '2017-12-31']).order('price').register(lambda data: print(data))
queue.select('stocks').where({
'price[>=]': 30,
'trans': ['BUY', 'SELL'],
'date[><]': ['2017-02-01', '2017-12-31']}).order('price').register(lambda data: print(data))
where支持链式和dict对象两种写法,我个人还是比较喜欢的。第二种写法借鉴了medoo这个PHP库。
其实回调也是很棒的,比如INSERT语句就可以返回当且操作的行数。具体的文档看这里:WIKI-回调函数。
对了,peewee也是支持哒~
https://gitee.com/kaaass/sqlite_queue_python
欢迎各位前往Star、Fork!