我正在使用带有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) 我开始开发一个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应用程序打开一个数据库连接,可以在线挂起一个小时,但有时数据库服务器重新启动,而python仍然有连接它将无法正常工作OperationalError
.
所以我正在寻找任何可靠的方法来"ping"数据库,并知道连接是活的.我检查了一个psycopg2文档,但找不到那样的东西.当然我可以发出一些简单的SQL语句SELECT 1
并捕获异常,但我希望有一个本机方法,比如PHP pg_connection_status
谢谢.
我猜这是一个非常基本的问题,但我无法弄清楚原因:
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版本
我正在尝试在我的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
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),但我找不到答案.)
我尝试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.2
mac os x lion上的默认编译器.
我看到几个与psycopg2
安装相关的帖子,但大多数都是通过安装在虚拟环境中解决的.那么......有人能给我一个建议吗?谢谢!非常感谢.
ps如果你需要安装psycopg2的编译日志,请告诉我,我没有在这里粘贴,因为它太长了.
看一下输出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,如果这很重要).
我错过了一些明显的东西吗
我正在遵循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) 假设我有一个看起来像这样的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
等同于布尔值?执行此检查的正确语法是什么?
psycopg2 ×10
python ×9
postgresql ×5
django ×2
connection ×1
database ×1
django-1.7 ×1
heroku ×1
json ×1
macos ×1
pip ×1
sql ×1
sqlalchemy ×1
vacuum ×1
virtualenv ×1