我在安装psycopg2时遇到问题.我尝试以下时出现以下错误pip install psycopg2
:
Error: pg_config executable not found.
Please add the directory containing pg_config to the PATH
or specify the full executable path with the option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
----------------------------------------
Command python setup.py egg_info failed with error code 1 in /tmp/pip-build/psycopg2
Run Code Online (Sandbox Code Playgroud)
但问题pg_config
实际上是在我的PATH
; 它运行没有任何问题:
$ which pg_config
/usr/pgsql-9.1/bin/pg_config
Run Code Online (Sandbox Code Playgroud)
我尝试将pg_config路径添加到该setup.cfg
文件并使用我从其网站(http://initd.org/psycopg/)下载的源文件构建它,我收到以下错误消息!
Error: Unable to find 'pg_config' file in '/usr/pgsql-9.1/bin/'
Run Code Online (Sandbox Code Playgroud)
但实际上它就是!!!
我对这些错误感到困惑.有人可以帮忙吗?
顺便说一句,我 …
我正在使用virtualenv
,我需要安装"psycopg2".
我做了以下事情:
pip install http://pypi.python.org/packages/source/p/psycopg2/psycopg2-2.4.tar.gz#md5=24f4368e2cfdc1a2b03282ddda814160
Run Code Online (Sandbox Code Playgroud)
我有以下消息:
Downloading/unpacking http://pypi.python.org/packages/source/p/psycopg2/psycopg2
-2.4.tar.gz#md5=24f4368e2cfdc1a2b03282ddda814160
Downloading psycopg2-2.4.tar.gz (607Kb): 607Kb downloaded
Running setup.py egg_info for package from http://pypi.python.org/packages/sou
rce/p/psycopg2/psycopg2-2.4.tar.gz#md5=24f4368e2cfdc1a2b03282ddda814160
Error: pg_config executable not found.
Please add the directory containing pg_config to the PATH
or specify the full executable path with the option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
Complete output from command python setup.py egg_info:
running egg_info
creating pip-egg-info\psycopg2.egg-info
writing pip-egg-info\psycopg2.egg-info\PKG-INFO
writing top-level names to pip-egg-info\psycopg2.egg-info\top_level.txt
writing …
Run Code Online (Sandbox Code Playgroud) 我收到的消息有很多错误:
"DatabaseError: current transaction is aborted, commands ignored until end of transaction block"
Run Code Online (Sandbox Code Playgroud)
之后从python-psycopg更改为python-psycopg2作为Django项目的数据库引擎.
代码保持不变,只是不知道这些错误来自哪里.
我需要用一个查询插入多行(行数不是常量),所以我需要像这样执行查询:
INSERT INTO t (a, b) VALUES (1, 2), (3, 4), (5, 6);
Run Code Online (Sandbox Code Playgroud)
我知道的唯一方法是
args = [(1,2), (3,4), (5,6)]
args_str = ','.join(cursor.mogrify("%s", (x, )) for x in args)
cursor.execute("INSERT INTO t (a, b) VALUES "+args_str)
Run Code Online (Sandbox Code Playgroud)
但我想要一些更简单的方法.
我想要一种直接从所选列名生成列标签的一般方法,并回想一下,看到python的psycopg2模块支持此功能.
我是Python和Django的新手.
我正在使用PostgreSQL数据库引擎后端配置Django项目,但我在每个数据库操作上都遇到错误,例如当我运行时manage.py syncdb
,我得到:
C:\xampp\htdocs\djangodir>python manage.py syncdb
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
438, in execute_manager
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
261, in fetch_command
klass = load_command_class(app_name, subcommand)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
67, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in im
port_module
__import__(name)
File "C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py"
, line 7, in <module>
from django.core.management.sql import custom_sql_for_model, emit_post_sync_
signal
File "C:\Python27\lib\site-packages\django\core\management\sql.py", line …
Run Code Online (Sandbox Code Playgroud) 我使用SQLAlchemy并至少有三个实体:engine
,session
并且connection
,其中有execute
方法,所以如果我如想选择所有记录,从table
我能做到这一点
engine.execute(select([table])).fetchall()
Run Code Online (Sandbox Code Playgroud)
还有这个
connection.execute(select([table])).fetchall()
Run Code Online (Sandbox Code Playgroud)
甚至这个
session.execute(select([table])).fetchall()
Run Code Online (Sandbox Code Playgroud)
- 结果将是相同的.
据我所知,如果有人使用engine.execute
它创建connection
,打开session
(Alchemy为你处理它)并执行查询.但这三种执行此类任务的方式之间是否存在全球差异?
应该使用什么fork或者包的组合来使PyPy,Django和PostgreSQL一起玩得很好?
我知道PyPy和Django一起玩得很好,但我不太确定PyPy和PostgreSQL.我确实看到Alex Gaynor制作了一个名为pypy-postgresql的PyPy 分支.我也知道有些人正在使用psycopg2-ctypes.
这些叉子之间有区别吗?或者我们应该使用稳定的1.9 PyPy并使用psycopg2-ctypes?使用ctypes选项可能会影响性能,请参阅下面的注释.
另外,有没有人在使用PyPy和pyscopg2时遇到任何陷阱?如果某些东西不能正常工作,那么回归CPython似乎很容易,但主要是我正在寻找程序员可以提前做好准备的事情.
我环顾四周,似乎psycopg2本身与PyPy一起工作.虽然psycopg2-ctypes似乎确实对某些人有用,但是有一个关于pypy-dev的讨论.我在Windows上工作,我不认为psycopg2-ctypes已经为Windows做好了准备,遗憾的是.
我运行"sudo pip install psycopg2",我得到一堆看起来像的输出
cc -DNDEBUG -g -fwrapv -Os .....
.....
cc -DNDEBUG -g -fwrapv -Os .....
.....
Run Code Online (Sandbox Code Playgroud)
最后它说:
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'cc' failed with exit status 1
----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip-uE3thn-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2
Storing debug log for failure in /Users/Tyler/Library/Logs/pip.log …
Run Code Online (Sandbox Code Playgroud) 我正在使用Python和psycopg2来连接到postgres.
当我插入一行...
sql_string = "INSERT INTO hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ");"
cursor.execute(sql_string)
Run Code Online (Sandbox Code Playgroud)
...如何获取我刚刚插入的行的ID?试:
hundred = cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
使用时返回错误RETURNING id
:
sql_string = "INSERT INTO domes_hundred (name,name_slug,status) VALUES ("
sql_string += hundred_name + ", '" + hundred_slug + "', " + status + ") RETURNING id;"
hundred = cursor.execute(sql_string)
Run Code Online (Sandbox Code Playgroud)
简单地回来None
.
更新:也是如此currval
(即使将此命令直接用于postgres工作):
sql_string = "SELECT currval(pg_get_serial_sequence('hundred', 'id'));"
hundred_id = cursor.execute(sql_string)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议吗?
谢谢!
psycopg2 ×10
python ×10
postgresql ×6
django ×3
pip ×2
orm ×1
pypy ×1
session ×1
sqlalchemy ×1
virtualenv ×1