使用 SQLAlchemy 查询 PgBouncer 后面的 PostgreSQL 数据库,使用事务级池。
用于这种设置的最佳模式是什么?我应该每个进程有一个引擎,使用ConnectionPool,还是应该NullPool为每个请求创建一个引擎,并为每个请求使用?我应该使用完全不同的模式吗?
非常感谢!如果需要更多信息,请告诉我,我会尽快更新。
根据文档:
PL/Python 仅可用作“不受信任”的语言,这意味着它不提供任何方式来限制用户可以在其中执行的操作,因此被命名为 plpythonu。如果在 Python 中开发了安全执行机制,那么将来可能会出现可信变体 plpython。
为什么为 Python 开发安全执行机制却很难,而为其他语言(如 Perl)开发安全执行机制却没有?
我们最近遇到了与在 SQL Server 中存储为 varchar(120) 的字段相关的编码问题。在 SSMS 中,varchar 显示为:
“谁杀了琼本?”
但是,当它被带入python时,它显示为:
我从 Python 方面对此进行了研究,并没有发生什么奇怪的事情。我的理论是 SQL Server 中的 varchar 接受 UTF-8 字符,这些字符在 python 中的显示方式与 SSMS 不同。我对 SQL Server 中的编码不是很熟悉。有人可以让我知道以下内容:
先感谢您!
使用sp_help N'table_name';我发现这个VARCHAR列的排序规则是:SQL_Latin1_General_CP1_CI_AS。
我在繁忙的 postgres 9 数据库前运行 pgBouncer。在大多数情况下,它运行良好。但是每隔几个小时我就会收到一封来自我的应用程序的错误电子邮件,但 psycopg2 除外:
OperationalError('无法连接到服务器:无法分配请求的地址服务器是否在主机“neo-hulk”上运行并接受端口 6432 上的 TCP/IP 连接?')
这是一个 python 应用程序,其中有一堆 celery 工人正在运行任务。当这些错误到达时,我检查 pgbouncer db 并且池大小在限制范围内。经过一些实验,我将池最大大小设置为 400,池大小设置为 200。池模式是“会话”(请求主要是自动提交,几乎没有事务)。
是什么让 pgBouncer 像那样“消失”?它只是在很短的时间内(总的来说,与它处理的大量请求相比,我们谈论的是极少量的请求),但那些失败的请求很重要。
谢谢!
我是 PostgreSQL 世界的新手,所以我提前道歉,因为不知道这些问题是否有明显的答案。
基本上我在寻找两件事。首先是一个简单的基于“包含”的搜索,其中 python 等效项类似于:
def find_all_containing( input_array=[], target ):
output=[]
for i in input_array:
if target in i:
output.append(i)
return(output)
Run Code Online (Sandbox Code Playgroud)
在我目前正在构建的数据库中,从逻辑上讲,如果我试图显示描述中包含“evil”的所有片段标题,我倾向于相信 SQL 命令看起来有点像这样。
SELECT title FROM snippets WHERE 'evil' in description;
/* or */
SELECT title FROM snippets WHERE description CONTAINS 'evil';
Run Code Online (Sandbox Code Playgroud)
我编写了一个内联 python 函数,它返回一个 'TRUE' 或 'FALSE' 来完成以下工作。
/* contains function here */
CREATE FUNCTION contains (input_text text, target text) RETURNS text AS $$
if target in input_text:
return("TRUE")
return("FALSE")
$$ LANGUAGE plpythonu;
/* working command of …Run Code Online (Sandbox Code Playgroud) 我们有一个很好的 Python 代码,它可以发送一些电子邮件并与云系统进行交互。工作正常。但是我们必须每隔几分钟就启动它来轮询数据库。出于业务目的,我们确实需要实时启动 python 脚本,因此没有轮询延迟。(这服务于与客户通电话的销售人员。)
我们真的不想要 1 分钟的轮询循环。或 30 秒。我们希望记录显示在数据库中并立即发生。
实现此目的的快速方法是在将特定记录类型插入到表中时触发它。
我们可以从触发器触发 python 脚本吗?
根据下面 Aaron 的说明,我们知道这是一个非常糟糕的事情™,但是这张表很少使用(每天插入 0-12 次)。轮询表无法满足我们的业务需求(我们需要 .py 立即运行——它不仅仅是发送电子邮件)。
我们认为满足我们业务需求的一种方法是在 SQL Server 上设置 .net 版本的 python,然后让 T-SQL 以调用 C# 东西的方式调用 python 脚本......但我们不知道如何真的这样做!(因此这个问题)。
文档/细节?
我在 Stack Overflow 上问了一个后续问题:如何在 SQL Server 中创建 Python CLR 过程?
问题下的问题:你有一块python。您希望它从 SQL 触发器触发,但您知道这是一件非常糟糕的事情。那么,在 SQL 操作中间没有 python 代码的情况下,您如何实际实现相同的效果?
解决这种需求的非触发、非轮询方法是什么?
(同样的效果=“插入/更新/删除发生在表中,并且在db事件的2秒内触发python脚本,不轮询表”)
这个问题是针对我正在为学校写的报告。从技术上讲,什么是 Psycopg2?在本教程中,他们将其称为“适配器”和“驱动程序”
Psycopg2 是一个积极开发的符合 DB API 2.0 的 PostgreSQL驱动程序。它是为多线程应用程序设计的,并管理自己的连接池。适配器的其他有趣功能是,如果您使用 PostgreSQL 数组数据类型,Psycopg 会自动将使用该数据类型的结果转换为 Python 列表。
既然它被import编入了 Python,我会认为它是一个库吗?
库、驱动程序和适配器之间有什么区别?
我想在我的 postgresql 数据库中有 python3 来编写存储过程。
在psql客户端中,当我输入命令时create extension plpython3u,出现错误:
couldn't open extension control file /usr/share/postgresql/9.1/extension/plpython3u.control : No such file or directory
Run Code Online (Sandbox Code Playgroud)
我已经检查过,目录中有 plpythonu.control 和 plpython2u.control ,但不是版本 3 的那个。
但是,我已经从 depot安装了软件包python3和python3-postgresql(除其他外)。我使用的是 Ubuntu 12.04,内核 3.2.0.38,安装了 postgresql 9.1。
我应该安装(或做什么)才能在我的机器上安装 plpython3u.control 文件并在我的数据库中使用 python3?
我在两台不同的服务器上有两个不同的 Postgres 数据库(一个实际上是本地的)。与此问题类似,我想同时使用两个数据库。但是,我不知道如何使用psycopg2.
所以我想我可能需要两个不同的游标:
conn_local = psycopg2.connect(dbname='local_db', host='localhost')
conn_remote = psycopg2.connect(dbname='remote_db', host='some.other.server')
curs_local = conn_local.cursor()
curs_remote = conn_remote.cursor()
Run Code Online (Sandbox Code Playgroud)
但是我该如何处理这些数据库呢?例如,当我尝试连接两个表中的数据时:
curs_local.execute("""
CREATE TABLE local_db.public.newtable AS
SELECT remote_db.public.remotetable.rcolumn AS col_from_remote,
local_db.public.localtable.lcolumn AS col_from_local
FROM remote_db.public.remotetable, local_db.public.localtable""")
Run Code Online (Sandbox Code Playgroud)
的样式会有错误psycopg2.NotSupportedError: cross-database references are not implemented: "local_db.public.new_table"。该ATTACH TABLE命令(如此处的解决方案中所述)在 Postgres/psycopg2 中显然不存在。
是否可以同时使用多个数据库?如何?
或者将我必须从复制(导出/导入)中的数据remote_db,以local_db第一?
我有一个包含多个字段的集合,我想从中获取最小值。我知道一个获取最大值的命令:
collection.find_one(sort=[("myfield", -1)])["myfield"]
Run Code Online (Sandbox Code Playgroud)
但不是一个获得分钟。有没有办法做到这一点?