问题标签 [psycopg]

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.

0 投票
4 回答
7551 浏览

python - Python-PostgreSQL psycopg2 接口 --> executemany

我目前正在分析一个维基百科转储文件;我正在使用 python 从中提取一堆数据并将其保存到 PostgreSQL 数据库中。我一直在努力让事情变得更快,因为这个文件很大(18GB)。为了与 PostgreSQL 交互,我使用 psycopg2,但这个模块似乎模仿了许多其他这样的 DBAPI。

无论如何,我有一个关于 cursor.executemany(command, values); 的问题。在我看来,每 1000 个值左右执行一次 executemany 比为这 500 万个值中的每一个调用 cursor.execute(command % value) 更好(请确认或纠正我!)。

但是,你看,我正在使用 executemany 将 1000 行插入到具有唯一完整性约束的表中;这个约束事先没有在 python 中验证,因为这要么需要我一直选择(这似乎适得其反),要么需要我获得超过 3 GB 的 RAM。所有这一切都说明当我的脚本试图通过捕获 psycopg2.DatabaseError 来插入已经存在的行时,我依靠 Postgres 来警告我。

当我的脚本检测到这样的非唯一插入时,它 connection.rollback() (每次最多可生成 1000 行,并且有点使 executemany 毫无价值),然后一一插入所有值。

由于 psycopg2 的文档记录很差(许多很棒的模块也是如此......),我找不到有效的解决方法。我已将每个 executemany 插入的值的数量从 1000 减少到 100,以减少每个 executemany 的非唯一插入的可能性,但我很确定它们是一种告诉 psycopg2 忽略这些异常或告诉光标继续执行。

基本上,这似乎是一种解决方案如此简单和流行的问题,我所能做的就是询问以了解它。

再次感谢!

0 投票
2 回答
567 浏览

python - 通过 Psycopg 插入 Pg

如何修复 Python 中的 SQL 语句?

数据库连接有效。但是,cur.execute返回 为 false 的none 。

我的代码

Psql 中的 SQL 命令返回正确的输出。我可以类似地INSERT在 Psql 中运行,但不能通过 Python 的脚本运行。我没有收到 /var/log 的警告/错误。

可能的错误是

  1. cursor(),但似乎是正确的
  2. 方法connect()的语法,但似乎没问题
0 投票
3 回答
1432 浏览

python - 当 BEGIN 在自动提交模式的连接上运行时 Postgres 会做什么?

在使用 Postgres (psycopg) 连接时,我试图更好地理解“自动提交”的概念。假设我有一个新连接,将其隔离级别设置为 ISOLATION_LEVEL_AUTOCOMMIT,然后直接运行此 SQL,而不使用游标开始/回滚方法(作为练习;并不是说我真的想这样做):

插入 C 和 D 会发生什么?

自动提交是否纯粹是 psycopg 中的一个内部设置,会影响它如何发出 BEGIN?在这种情况下,上述 SQL 不受影响;插入 A 和 B 完成后立即提交,而 C 和 D 在事务中运行并回滚。该事务在什么隔离级别下运行?

还是自动提交是连接本身的真实设置?在那种情况下,它如何影响BEGIN的处理?它被忽略了,还是覆盖了自动提交设置以实际启动事务?该事务在什么隔离级别下运行?

还是我完全脱靶?

0 投票
4 回答
6770 浏览

python - python将“E”添加到字符串

这个字符串:

总是扩展到:

谁能告诉我为什么?

编辑:上面的扩展字符串是我的数据库在错误消息中返回给我的字符串。我正在使用 psycopg2 访问我的 postgres 数据库。真正的代码如下所示:

0 投票
1 回答
296 浏览

python - osx 下的 Psycopg2 在命令行上工作,但在 Aptana Studio 中失败

6 个月以来,我一直在 Python/Snowleopard 下愉快地进行开发。我刚刚将 Python 升级到 2.6.5 和一大堆库,包括 psycopg2 和 Turbogears。我可以启动 tg-admin 并毫无问题地运行一些查询。同样,我可以毫无问题地从命令行运行我的网站。

但是,如果我尝试在 Aptana Studio 下启动我的应用程序,我会在尝试导入 Psychopg2 时遇到以下异常:

('dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2/_psycopg.so, 2):找不到符号:_PQbackendPID\n 引用自:/Library/Frameworks /Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2/_psycopg.so\n 预期在:平面命名空间\n 在/Library/Frameworks/Python.framework/Versions/2.6/lib/python2 .6/site-packages/psycopg2/_psycopg.so',)

这发生在运行以下代码后:try: import psycopg2 as psycopg except ImportError as ex: print "import failed :-( xxxxxxxx = " print ex.args

我已经确认相同版本的 python 正在运行如下: import sys print "python version: ", sys.version_info

有没有人有任何想法?我似乎有一些引用暗示这是一个 64 位问题。- 戴夫

0 投票
1 回答
2013 浏览

python - django、postgres 8.4、psycopg 2.2.2、python 2.7、mod_wsgi

我已经在本地 django 服务器上安装了 django/postgres 并且工作正常。我正在尝试让 Apache 正常工作。我已经设置了 mod_wsgi 并且能够获得“Hello World”,然后重新启动 Apache。我快到了,但是当我打开 localhost/index.html 时,我得到了这个服务器错误:

mod_wsgi 和 psycopg 版本是否可能不兼容?有没有人尝试过这种类型的设置?

更新1:

我降级到 2.6、mod_wsgi、psycopg2,但在 apache 日志文件中仍然出现此错误。

Fri Sep 03 12:17:41 2010] [错误] [client 97.80.165.181] 文件“C:\Python26\lib\site-packages\django\db\__init__.py”,第 77 行,在 [Fri Sep 03 12 :17:41 2010] [错误] [客户端 97.80.165.181] 连接 = 连接 [DEFAULT_DB_ALIAS] [2010 年 9 月 3 日星期五 12:17:41] [错误] [客户端 97.80.165.181] 文件“C:\Python26\lib\站点包\django\db\utils.py",第 91 行,在getitem[2010 年 9 月 3 日星期五 12:17:41] [错误] [客户端 97.80.165.181] 后端 = load_backend(db['ENGINE']) [2010 年 9 月 3 日星期五 12:17:41] [错误] [客户端 97.80.165.181 ] 文件“C:\Python26\lib\site-packages\django\db\utils.py”,第 49 行,在 load_backend [Fri Sep 03 12:17:41 2010] [error] [client 97.80.165.181] raise ImproperlyConfigured (error_msg) [Fri Sep 03 12:17:41 2010] [error] [client 97.80.165.181] TemplateSyntaxError: Caught ImproperlyConfigured while rendering: 'django.db.backends.postgresql_psycopg2' 不是可用的数据库后端。[Fri Sep 03 12:17:41 2010] [error] [client 97.80.165.181] 尝试使用 django.db.backends.XXX,其中 XXX 是以下之一:[Fri Sep 03 12:17:41 2010] [error] [客户端 97.80.165.181]
'dummy'、'mysql'、'oracle'、'postgresql'、'postgresql_psycopg2'、'sqlite3' [Fri Sep 03 12:17:41 2010] [error] [client 97.80.165.181] 错误是:无法导入名称 utils

你知道它可能表明什么吗?

更新 2:

原因在文件 django/db/backends/postgresql_psycopg2/base.py,版本 2.2.2,第 9 行:from django.db import utils

但我仍然不知道如何解决这个问题。有一个文件 django/db/utils.py,所以它应该可以工作。毕竟,它适用于开发服务器。但不适用于 Apache + mod_wsgi

0 投票
2 回答
212 浏览

python - Python 和 psycopg 检测网络错误

当使用 psycopg 连接到 postgresql 数据库并拉出网络电缆时,我没有收到任何错误。如何在代码中检测到这一点以通知用户?

0 投票
1 回答
1581 浏览

postgresql - postgresql CLUSTER 命令不清除死元组

我们有一个后台进程(无限循环中的 linux 守护进程),它自动从 csv 文件中获取所有行,这些文件位于某个目录中,并将它们导入到表中。守护进程一一处理目录中出现的任何文件,用python编写,并使用psycopg2连接到我们的postgresql数据库。

该过程使用 INSERT 语句导入这些记录,但首先删除与 csv 文件中的任何记录具有相同唯一键的任何表记录。通常,该过程正在删除它插入的每条记录的记录。因此,当这个守护进程在后台运行时,它是 DELETING 然后 INSERTING 行。每次它处理一个文件时,它都会专门提交事务,关闭游标,然后关闭连接。

我们希望定期(每天两次)运行 CLUSTER 以删除死元组并将表保持在可管理的磁盘大小。

但是,此过程中的某些内容正在阻止 CLUSTER 命令删除进程运行时正在删除的所有记录的死元组。我们知道会发生这种情况,因为如果我们在进程运行时运行 CLUSTER,包含此导入数据的表的磁盘大小不会减少,并且 pg_stat_user_tables 将显示许多死元组。

如果我们停止进程然后运行 ​​CLUSTER,表的磁盘大小将显着减小,并且 pg_stat_user_tables 将报告所有死元组都已消失。

奇怪的是,我们每次处理每个文件时都在提交事务并关闭连接,所以我不知道是什么不允许在进程运行时删除死元组。

同样奇怪的是,如果我们停止该进程,然后再次启动该进程,然后执行一个 CLUSTER,它将删除之前运行守护进程创建的所有死元组;但是任何后续的 CLUSTER 调用都不会清除当前运行的守护进程创建的任何死元组(当然它仍在运行)。

因此,在进程停止之前,有些东西正在维护到死元组的某种链接,即使我们已经提交了事务并关闭了与创建这些死元组的 postgres 的所有连接。pg_locks 没有报告任何打开的锁,也没有报告正在运行的事务,所以它看起来不像是锁或打开的事务问题。

归根结底,这会阻止我们在表上定期运行 CLUSTER,以免它不断增长。

我确信对此有一个简单的答案,但我在任何地方都找不到。该过程的一些骨架代码如下。这确实是一个简单的过程,所以我不知道这里发生了什么。任何指导将不胜感激。

0 投票
1 回答
1393 浏览

django - django/postgresql 设置 - psycopq2.OperationalError

执行时出现“psycopq2.OperationalError”:python manage.py syncdb。使用 djangostack 脚本进行测试时,postgresql 服务器似乎已启动并正在运行。有人遇到过这个吗?只需阅读 django 教程并进行设置。该框架的完整新手...我在这个论坛上发现了很多类似的问题,但似乎没有一个完全匹配...谢谢!

0 投票
3 回答
4922 浏览

python - 执行大型插入时 PostgreSQL 连接意外关闭

我正在填充一个 PostgreSQL 表,其中包含之前从另一个数据库中选择的 ~11.000.000 行。我正在使用 Python 和 psycopg2。整个过程估计需要 1.5 小时才能完成。但是,大约 30 分钟后,我得到“连接意外关闭”异常。源代码如下所示:

我插入(1)(2)在第一次尝试失败后,假设打开的事务的时间上限约为 30 分钟,或者游标具有挂起插入的上限。似乎这些假设都不是真的,错误在于其他地方。

这两个数据库都存储在我通过主机端口转发连接的 VirtualBox 机器上。我在主机上运行程序。

这两个数据库都只是用于测试目的,它们没有其他连接需要管理。也许我必须重写这个问题来解决这个问题,但是我需要在其他地方进行非常耗时的插入(大约运行几天),所以我非常担心psycopg2PostgreSQL 中的一些隐藏的时间限制。