标签: psycopg2

PostgreSQL - 如何从事务块外的代码运行VACUUM?

我正在使用带有psycopg2的Python,并且我试图VACUUM在每日操作后运行一个完整的插入数千行.问题是,当我尝试VACUUM在我的代码中运行命令时,我收到以下错误:

psycopg2.InternalError: VACUUM cannot run inside a transaction block
Run Code Online (Sandbox Code Playgroud)

如何从事务块外部的代码运行它?

如果它有所不同,我有一个简单的DB抽象类,下面显示了一个子集用于上下文(不是runnable,省略了异常处理和docstrings以及进行了行跨越调整):

class db(object):
    def __init__(dbname, host, port, user, password):
        self.conn = psycopg2.connect("dbname=%s host=%s port=%s \
                                      user=%s password=%s" \
                                      % (dbname, host, port, user, password))

        self.cursor = self.conn.cursor()

    def _doQuery(self, query):
        self.cursor.execute(query)
        self.conn.commit()

    def vacuum(self):
        query = "VACUUM FULL"
        self._doQuery(query)
Run Code Online (Sandbox Code Playgroud)

python sql postgresql psycopg2 vacuum

33
推荐指数
4
解决办法
2万
查看次数

ProgrammingError:安装Psycopg2后关系"django_session"不存在错误

我开始开发一个Django基础Web应用程序.一切都很好,直到我Psycopg2为我创建的数据库安装PstgreSql.现在,当我尝试在我的网站中打开任何页面时,它会抛出ProgrammingError: relation "django_session" does not exist错误.

Request Method:     GET
Request URL:    http://127.0.0.1:8000/login/
Django Version:     1.7
Exception Type:     ProgrammingError
Exception Value:    

relation "django_session" does not exist
LINE 1: ...ession_data", "django_session"."expire_date" FROM "django_se...
                                                             ^

Exception Location:     /home/alex/.virtualenvs/startDjango/local/lib/python2.7/site-packages/django/db/backends/utils.py in execute, line 65
Python Executable:  /home/alex/.virtualenvs/startDjango/bin/python
Run Code Online (Sandbox Code Playgroud)

这是我的数据库设置 Setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myDB',
        'USER': 'alex',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在开发中 virtualenvs

知道如何解决这个问题吗?谢谢

python django psycopg2 django-1.7

33
推荐指数
2
解决办法
2万
查看次数

确保psycopg2数据库连接存活

我有一个python应用程序打开一个数据库连接,可以在线挂起一个小时,但有时数据库服务器重新启动,而python仍然有连接它将无法正常工作OperationalError.

所以我正在寻找任何可靠的方法来"ping"数据库,并知道连接是活的.我检查了一个psycopg2文档,但找不到那样的东西.当然我可以发出一些简单的SQL语句SELECT 1并捕获异常,但我希望有一个本机方法,比如PHP pg_connection_status

谢谢.

python database connection psycopg2

32
推荐指数
4
解决办法
3万
查看次数

连接到postgres中的URI

我猜这是一个非常基本的问题,但我无法弄清楚原因:

import psycopg2
psycopg2.connect("postgresql://postgres:postgres@localhost/postgres")
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

psycopg2.OperationalError: missing "=" after
"postgresql://postgres:postgres@localhost/postgres" in connection info string
Run Code Online (Sandbox Code Playgroud)

任何的想法?根据有关连接字符串的文档,我认为它应该可行,但它只是这样:

psycopg2.connect("host=localhost user=postgres password=postgres dbname=postgres")
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu12.04上使用Python2.7.3上的最新psycopg2版本

python psycopg2

32
推荐指数
3
解决办法
3万
查看次数

在mac osx 10.9.5上安装Psycopg2

我正在尝试在我的Mac书上安装Psycopg2.我仍然得到同样的错误.我在Stack Overflow上发现了很多相同的问题,但似乎没有答案可行.我认为它已经过时了.我正在使用:

Mac osx 10.9.5
Python 3.4.3
Run Code Online (Sandbox Code Playgroud)

我的错误代码是:

运行setup.py egg_info for package psycopg2错误:找不到pg_config可执行文件.

请将包含pg_config的目录添加到PATH,或使用以下选项指定完整的可执行文件路径:

python setup.py build_ext --pg-config/path/to/pg_config build ...

或者使用'setup.cfg'中的pg_config选项.从命令python setup.py egg_info完成输出:运行egg_info

写pip-egg-info/psycopg2.egg-info/PKG-INFO

将顶级名称写入pip-egg-ps/psycopg2.egg-info/top_level.txt

将dependency_links写入pip-egg-info/psycopg2.egg-info/dependency_links.txt

警告:manifest_maker:找不到标准文件'-c'

错误:找不到pg_config可执行文件.

请将包含pg_config的目录添加到PATH

或使用以下选项指定完整的可执行文件路径:

python setup.py build_ext --pg-config/path/to/pg_config build ...

或者使用'setup.cfg'中的pg_config选项.


命令python setup.py egg_info失败,错误代码为1/Users/stevengerrits/build/psycopg2存储完整的登录/Users/stevengerrits/Library/Logs/pip.log

python postgresql macos psycopg2

32
推荐指数
10
解决办法
5万
查看次数

用psycopg2转义Postgres的SQL"LIKE"值

psycopg2是否有一个函数来转义Postgres 的LIKE操作数的值?

例如,我可能想要匹配以字符串"20%of all"开头的字符串,所以我想写这样的东西:

sql = '... WHERE ... LIKE %(myvalue)s'
cursor.fetchall(sql, { 'myvalue': escape_sql_like('20% of all') + '%' }
Run Code Online (Sandbox Code Playgroud)

我可以在这里插入一个现有的escape_sql_like函数吗?

(类似的问题如何显式引用字符串值(Python DB API/Psycopg2),但我找不到答案.)

python postgresql psycopg2 python-db-api

31
推荐指数
6
解决办法
2万
查看次数

psycopg2安装错误 - 未加载库:libssl.dylib

我尝试psycopg2使用virtualenv 安装pip,编译看起来没问题,它说"成功安装了psycopg2",但是当我尝试在python解释器中导入它时(在virtualenv中),它表示错误:

  File "<stdin>", line 1, in <module>
  File "/Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/__init__.py", line 67, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: dlopen(/Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.dylib
  Referenced from: /Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/_psycopg.so
  Reason: Incompatible library version: _psycopg.so requires version 1.0.0 or later, but libssl.0.9.8.dylib provides version 0.9.8
Run Code Online (Sandbox Code Playgroud)

问题是我pip在几周之前使用我的其他虚拟环境成功安装它,就像几个星期前一样,让它postgresql在我的Mac上工作.我想知道这是否是编译器的问题?我shortens from 64-bit to 32-bit在安装psycopg2时看到了一些警告.我的编译器是i686-apple-darwin11-llvm-gcc-4.2mac os x lion上的默认编译器.

我看到几个与psycopg2安装相关的帖子,但大多数都是通过安装在虚拟环境中解决的.那么......有人能给我一个建议吗?谢谢!非常感谢.

ps如果你需要安装psycopg2的编译日志,请告诉我,我没有在这里粘贴,因为它太长了.

python psycopg2 virtualenv

31
推荐指数
5
解决办法
3万
查看次数

在Postgres/SQLAlchemy上设置application_name

看一下输出select * from pg_stat_activity;,我看到一个名为的列application_name,在这里描述.

我看到psql正确设置了这个值(到psql...),但我的应用程序代码(psycopg2/SQLAlchemy)将它留空.

我想将它设置为有用的东西,比如web.1,web.2等等,所以我可以稍后关联什么,我看到pg_stat_activity与我在我的应用程序日志中看到.

我找不到如何使用SQLAlchemy设置这个字段(如果push推进 - 即使使用原始sql;我在Heroku上使用PostgresSQL 9.1.7,如果这很重要).

我错过了一些明显的东西吗

postgresql sqlalchemy psycopg2

31
推荐指数
1
解决办法
1万
查看次数

在Mac OS X 10.7上无法在virtualenv中使用pip安装psycopg2

我正在遵循Heroku的教程来部署Django应用程序:http://devcenter.heroku.com/articles/django#prerequisites.

一切正常,直到我到达这一部分:

$ pip install Django psycopg2
Run Code Online (Sandbox Code Playgroud)

我可以自己安装Django,但问题是psycopg2.

我一直收到这个错误:

ld: library not found for -lpq

collect2: ld returned 1 exit status

ld: library not found for -lpq

collect2: ld returned 1 exit status

lipo: can't open input file: /var/folders/_4/p6l0y0t51hd4xbq7llbyshmw0000gn/T//cc0L10mI.out (No such file or directory)

error: command 'gcc-4.2' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

我在我的机器上安装了PostgreSQL 9.1.

另外,在输出中,有这样的一堆行:

gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.4.4 (dt dec pq3 ext)" …
Run Code Online (Sandbox Code Playgroud)

python django pip psycopg2 heroku

30
推荐指数
7
解决办法
3万
查看次数

如何检查Postgres中是否存在json密钥?

假设我有一个看起来像这样的json:

some_json = {'key_a': {'nested_key': 'a'},
             'key_b': {'nested_key': 'b'}}
Run Code Online (Sandbox Code Playgroud)

请注意,key_a并且key_b是映射到词典的可选键,可能存在也可能不存在.

我有一个函数检查外键是否存在some_json并返回一个布尔值.

CREATE FUNCTION key_exists(some_json json, outer_key text)
RETURNS boolean AS $$
BEGIN
    RETURN (some_json->outer_key IS NULL);
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ProgrammingError: operator does not exist: json -> boolean
Run Code Online (Sandbox Code Playgroud)

为什么outer_key等同于布尔值?执行此检查的正确语法是什么?

python postgresql json psycopg2

29
推荐指数
3
解决办法
3万
查看次数