切刀用的烧瓶延长件
Flask-CuttlePool的Python项目详细描述
烧瓶切割工具为烧瓶使用Cuttle Pool提供了一个方便的界面。
如何指导
如果你还没读过刀具的How-to Guide,你 真的应该再进一步。
FlaskCuttlePool对象接受与^{tt2}相同的参数$ 对象,以及烧瓶app对象。假设我们有 导入和app对象。
import sqlite3 from flask import Flask from flask_cuttlepool import FlaskCuttlePool app = Flask(__name__)
设置池对象有两种方法。池初始化时
pool = FlaskCuttlePool(sqlite3.connect, app=app, database='ricks_lab')
或者显式地使用init_app()
pool = FlaskCuttlePool(sqlite3.connect) pool.init_app(app)
任何以CUTTLEPOOL_开头的配置键都将转换为 键值对。如果在传递到的初始参数中已经存在密钥 __init__()方法,它们将被 app.config。例如
pool = FlaskCuttlePool(sqlite3.connect, database='ricks_lab') app.config['CUTTLEPOOL_DATABASE'] = 'citadel_of_ricks' pool.init_app(app)
将导致与该app对象关联的连接池 正在连接到'citadel_of_ricks',而不是'ricks_lab'。每把钥匙 形式为app.config['CUTTLEPOOL_KEY'] = value的app.config上的值对作为key=value传递给池构造函数,其中key是 小写字母。
FlaskCuttlePool对象还应该提供两个回调。这个 ping回调用于检查连接是否仍处于打开状态。这个 normalize_connection回调确保每个连接具有相同的状态 当它被从池中取回时。有关这些方法的详细信息,请参见 Cuttle Pool How-to Guide。
继续上面的例子,这些回调可以实现如下 这个:
@pool.ping def ping(connection): try: rv = connection.execute('SELECT 1').fetchall() return (1,) in rv except sqlite3.Error: return False @pool.normalize_connection def normalize_connection(connection): connection.row_factory = None
现在游泳池可以正常使用了。任何对get_connection()的调用都将 返回连接的方式与CuttlePool对象返回连接的方式相同。
为了方便起见,connectiongetter将存储 应用程序上下文上的连接,并在 connectiongetter被再次调用。当应用程序上下文被破坏时 关闭时,连接将返回到池。因此,没有必要 要对从connectiongetter检索的连接调用close(), 但如果调用close()就可以了。使用检索的连接 get_connection()应显式关闭。
便利方法cursor()将返回 连接存储在应用程序上下文中。
完整的示例如下:
import sqlite3 from flask import Flask from flask_cuttlepool import FlaskCuttlePool app = Flask(__name__) app.config['CUTTLEPOOL_DATABASE'] = ':memory:' pool = FlaskCuttlePool(sqlite3.connect) pool.init_app(app) @pool.ping def ping(connection): try: rv = connection.execute('SELECT 1').fetchall() return (1,) in rv except sqlite3.Error: return False @pool.normalize_connection def normalize_connection(connection): connection.row_factory = None with app.app_context(): # Get a connection, store it on the application context and return to # user. This connection doesn't need to be explicitly closed. con = pool.connection # Subsequent calls to pool.connection will get the same connection from # the application context. con is pool.connection # True # Get a different connection con2 = pool.get_connection() con2 is con # False # This connection should be explicitly closed since it was retrieved by # get_connection(). con2.close() # Get a cursor from the connection on the application context. cur = pool.cursor() cur.execute(SOME_SQL) cur.close() pool.connection.commit() # Now the application context has been torn down, so the connection has been # returned to the pool. pool.connection is None # True
常见问题解答
这些问题仅与烧瓶切割工具有关,如果没有,请检查切割工具的FAQ 在这里找到你的答案。
如何安装?
pip install flask-cuttlepool
什么是应用程序上下文?
这是一个烧瓶的延伸部分,所以它应该在烧瓶的上下文中使用 申请。见here至 了解Flask的应用程序上下文。
贡献
强烈建议在virtualenv中开发。
分叉存储库。
克隆存储库:
git clone https://github.com/<your_username>/flask-cuttlepool.git
以可编辑模式安装软件包:
cd flask-cuttlepool pip install -e .[dev]
现在你准备好了。有关运行测试的信息,请参见下一节。
运行测试
可以使用命令pytest运行测试。
我在哪里能得到帮助?
如果你还没有阅读上面的指南,请先阅读。否则, 检查issue tracker。你的问题可能是 地址在此处,如果不是,请提交问题:)