问题标签 [python-db-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python 数据库 API v2 > 如果在迭代期间执行的查询没有返回结果,则对结果集的迭代停止
我在一个脚本中使用适用于 Python 的 Snowflake 连接器(它实现了对 Python 数据库 API v2 规范的支持),该脚本从一个表中提取许多记录,迭代结果集,并且对于返回的每一行,查询另一个表可能会或可能不会返回任何结果。
如果第二个查询没有返回任何结果,则对第一个查询返回的结果的迭代将停止,即使没有引发错误。
以下代码演示了我遇到的问题......
如果抛出异常,我可以通过捕获错误并继续下一个结果来处理这种情况。鉴于没有抛出异常,如何处理这种情况?
python - Python 异步事务 psycopg2
可以使用 psycopg2 进行异步 i/o(可以在此处阅读)但是我不确定如何进行异步事务。考虑这一系列的事情:
- 绿色线程 1 启动事务 T
- GT1问题更新
- GT2 发布一个事务性更新
- GT1问题更新
- GT1 提交事务 T
我假设 GT1 更新与 GT2 更新冲突。
现在根据文档:
从同一连接创建的游标不是孤立的,即游标对数据库所做的任何更改都可以立即被其他游标看到。
所以我们不能在游标上实现上面的流程。我们可以在不同的连接上实现它,但是由于我们正在执行异步操作,因此产生(可能)数千个数据库连接可能会很糟糕(更不用说 Postgres 无法处理这么多的开箱即用)。
另一种选择是拥有一个连接池并重用它们。但是,如果我们发出 X 个并行事务,则所有其他绿色线程都会被阻塞,直到某个连接可用。因此,有用的绿色线程的实际数量是 ~X(假设应用程序受数据库严重限制),这引发了一个问题:我们为什么要使用 async 开始?
现在这个问题实际上可以推广到 DB API 2.0。也许真正的答案是 DB API 2.0 不适合异步编程?那么我们将如何在 Postgresql 上执行异步 io 呢?也许其他一些图书馆?
或者可能是因为 postgresql 协议实际上是同步的?能够在任何时间(每个连接)“写入”任何事务将是完美的。Postgresql 必须为此公开事务的 id。可行吗?也许两阶段提交是答案?
或者我在这里错过了什么?
编辑:这似乎是 SQL 的一个普遍问题,因为BEGIN; COMMIT;
语义不能有效地异步使用。
python - 使用python3将numpy整数类型插入sqlite
在python 3中将numpy整数对象的值插入数据库的正确方法是什么?在 python 2.7 中,numpy 数字数据类型干净地插入到 sqlite 中,但它们在 python 3 中没有
np.float 类型在 2 和 3 中似乎仍然可以正常工作。
在 python 2 中,numpy 标量整数数据类型不再是 int 的实例,甚至将整数值浮点数转换为 int。
这就是 dbapi 不再与 numpy 无缝协作的原因吗?
python - 一般捕获python DatabaseErrors
我有一个可以在各种不同的数据库引擎中实现的数据库模式(假设我将使用 pyodbc 连接到一个 MS Access 数据库,或者我将通过内置 sqlite3 模块连接到一个 SQLite 数据库作为简单的例子)。
我想创建一个工厂函数/方法,它根据某些参数返回适当类型的数据库连接,类似于以下内容:
现在我有一些查询代码应该适用于任何连接类型(因为无论底层数据库引擎如何架构都是相同的),但可能会引发我需要捕获的异常:
我遇到的问题是每个 DB API 2.0 实现中的 DatabaseError 类不共享一个公共基类(除了过于通用的异常),所以我不知道如何一般地捕获这些异常。显然,我可以执行以下操作:
...我为每个可能的数据库引擎包含了一个显式的 catch 块。但这对我来说似乎显然不是pythonic。
如何从不同的底层 DB API 2.0 数据库实现中捕获 DatabaseErrors?
python - 为什么需要 teardown_appcontext 来关闭数据库连接?
根据flask docs,当应用上下文崩溃时,我们应该关闭数据库连接:
但是应用程序上下文的拆除不会删除(唯一)对数据库连接的引用(g.sqlite_db
消失时g
消失)吗?我认为这会自动关闭连接(因为数据库驱动程序会关闭连接del
)。显式关闭连接有什么好处?
python - Python DB-Api 何时提交多个插入/更新
我有一个函数可以更新 db 中的单行。
是否可以多次(几千次)使用此功能并在conn.commit()
之后执行,如下所示:
或者我应该通过而curr
不是conn
update_one_row
?
我知道curr.executemany()
,但我更喜欢显式循环。有性能差异吗?
总的来说,我对游标的使用和何时提交非常迷茫。
sqlite - 更新时创建 Sqlite 数据库补丁
上下文: python 3.6 脚本每天使用sqlite3模块
多次更新 Sqlite 数据库。
数据库是~500Mo,每次更新加起来~250Ko。
问题:
我提供数据库的每个更新版本,并希望减少传输数据的大小。换句话说,我只想传输更新的内容(通过一种补丁)。
可以使用sqldiff.exe实用程序,但是,每次更新时它都需要创建数据库的本地副本。
问题:
有没有办法,使用Python(通过DB-API 2.0接口或使用Python中的其他方式),在更新数据库的同时生成这种补丁?
第一个想法:在执行提交之前/期间是否可以根据游标
编写补丁(例如更新数据库要执行的操作列表)?
python - ValueError: 操作参数必须是 str
我正在尝试使用 python 函数将一些数据库字段更新到 SQLite DB。我不断收到以下错误:
ValueError: 操作参数必须是 str
下面是我的代码。我很想知道如何更新 sqlite 数据库中的多个列。