mus*_*ero 2 python orm sqlalchemy
代码
create_engine(sqlite:////infodb/timestamp.db', pool_size=10)
在SQLAlchemy版本0.6.3中正常工作.但是,它在0.7.1版本中不起作用.
我得到的错误消息如下
TypeError:使用配置SQLiteDialect_pysqlite/NullPool/Engine发送到create_engine()的无效参数'pool_size'.请检查关键字参数是否适合此组件组合.
在0.7.1版中,poolclass
变量的默认值是.的实例sqlalchemy.pool.NullPool
.反过来,该NullPool
对象不接受pool_size
变量.在版本0.6.3中,poolclass
是一个实例,sqlalchemy.pool.SingletonThreadPool
因此没有问题处理pool_size
.
因此,版本SQLAlchemy 0.7.1 与0.6.3 不向后兼容.所以,我想知道,什么是从去的理由SingletonThreadPool
来NullPool
?它打破了用户的代码.
SQLite - SQLite方言现在
NullPool
用于基于文件的数据库除非您在连接池连接中使用临时表,否则此更改向后兼容99.999%.
基于文件的SQLite连接非常快,并且使用
NullPool
每次调用Engine.connect
创建新的pysqlite连接.之前
SingletonThreadPool
使用过,这意味着线程中某个引擎的所有连接都是相同的连接.这意味着新方法更直观,特别是在使用多个连接时.
SingletonThreadPool
仍然:memory:
是使用数据库时的默认引擎.请注意,由于SQLite处理临时表的方式,此更改会破坏跨会话提交使用的临时表.如果需要超出一个池连接范围的临时表,请参阅http://www.sqlalchemy.org/docs/dialects/sqlite.html#using-temporary-tables-with-sqlite上的说明.
到目前为止,主要的SQLAlchemy版本(因此介于0.5和0.6或0.6到0.7之间)总是包含向后不兼容的更改,因为主要想法正在制定中.0.7也不例外,请参阅Backwards Incompatible API Changes部分.
如果必须,您仍然可以通过调用中传递poolclass
关键字来提供不同的池类connect
:
from sqlalchemy.pool import SingletonThreadPool
engine = create_engine('sqlite:///mydb.db', poolclass=SingletonThreadPool)
Run Code Online (Sandbox Code Playgroud)
传入显式池类也适用于0.6.就个人而言,我在这里使用异常处理:
try:
engine = create_engine(URL, pool_size=10)
except TypeError:
# The pool_size argument won't work for the default SQLite setup in SQLAlchemy 0.7, try without
engine = create_engine(URL)
Run Code Online (Sandbox Code Playgroud)