我正在写一个快速而又脏的脚本,需要与数据库(PG)进行交互.
该脚本是解决现有问题的务实,战术解决方案.但是,我设想脚本会随着时间的推移而演变成一个更"精致"的系统.鉴于它目前正在快速组合(即我没有时间倾注大量的文档),我很想通过psycopg走快速而肮脏的路线.
psycopg2的优点(正如我目前所理解的)是:
缺点:
我对SqlAlchemy(慢/解释,臃肿,陡峭的学习曲线)的看法是否真实 - 无论如何,我可以使用sqlAlchemy以"粗略和准备"的方式使用psycopg - 即:
这样做的任何例子都可以吗?
我正在使用以下内容尝试将记录插入到postgresql数据库表中,但它无法正常工作.我没有收到任何错误,但表中没有记录.我需要提交还是其他什么?我正在使用随Bitnami djangostack安装一起安装的postgresql数据库.
import psycopg2
try:
conn = psycopg2.connect("dbname='djangostack' user='bitnami' host='localhost' password='password'")
except:
print "Cannot connect to db"
cur = conn.cursor()
try:
cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""")
except:
print "Cannot insert"
Run Code Online (Sandbox Code Playgroud) 我一直在使用python和RDBMS'(MySQL和PostgreSQL),我注意到我真的不明白如何使用游标.
通常,他的脚本通过客户端DB-API(如psycopg2或MySQLdb)连接到数据库:
connection = psycopg2.connect(host='otherhost', etc)
Run Code Online (Sandbox Code Playgroud)
然后创建一个游标:
cursor = connection.cursor()
Run Code Online (Sandbox Code Playgroud)
然后可以发出查询和命令:
cursor.execute("SELECT * FROM etc")
Run Code Online (Sandbox Code Playgroud)
现在查询的结果在哪里,我想知道?它在服务器上?还是我的客户端上的一点点,我的服务器上的一点点?然后,如果我们需要访问某些结果,我们会获取它们:
rows = cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)
要么
rows = cursor.fetchmany()
Run Code Online (Sandbox Code Playgroud)
现在让我们说,我不检索所有行,并决定执行另一个查询,以前的结果会发生什么?是他们的开销.
此外,我应该为每种形式的命令创建一个游标,并以某种方式不断地将它重用于那些相同的命令; 我头psycopg2可以某种方式优化多次执行但具有不同值的命令,它是如何值得的?
谢谢
这是我第一次使用PostgreSQL 8.4.2和Django(过去我一直使用MySQL或sqlite3).我应该使用哪个值DATABASE_ENGINE的settings.py,postgresql_psycopg2还是postgresql?他们如何彼此不同?
我正在尝试上传我的项目(在python中),它使用Psycopg2进行Amazon Elastic Beanstalk.我正在使用包含我的项目和requirements.txt文件的zip文件.
但是我收到了这个错误:
下载/解压缩psycopg2> = 2.4.6(来自-r /opt/python/ondeck/app/requirements.txt(第3行))运行setup.py egg_info for package psycopg2错误:找不到pg_config可执行文件.
Run Code Online (Sandbox Code Playgroud)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
我如何在亚马逊上解决这个问题?
python psycopg2 amazon-web-services amazon-elastic-beanstalk
出于某些原因,我想明确引用字符串值(成为构造的SQL查询的一部分),而不是等待cursor.execute方法对其第二个参数的内容执行的隐式引用.
通过"隐含引用"我的意思是:
value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;"
cursor.execute( query, (value,) ) # value will be correctly quoted
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样的东西:
value = "Unsafe string"
query = "SELECT * FROM some_table WHERE some_char_field = %s;" % \
READY_TO_USE_QUOTING_FUNCTION(value)
cursor.execute( query ) # value will be correctly quoted, too
Run Code Online (Sandbox Code Playgroud)
这是READY_TO_USE_QUOTING_FUNCTIONPython DB API规范所期望的低级别(我在PEP 249文档中找不到这样的功能).如果没有,也许Psycopg2提供这样的功能?如果没有,也许Django提供这样的功能?我不想自己写这样的功能......
我有数千万行从多维数组文件传输到PostgreSQL数据库.我的工具是Python和psycopg2.批量处理数据的最有效方法是使用copy_from.但是,我的数据大多是32位浮点数(real或float4),所以我宁愿不转换为real→text→real.这是一个示例数据库DDL:
CREATE TABLE num_data
(
id serial PRIMARY KEY NOT NULL,
node integer NOT NULL,
ts smallint NOT NULL,
val1 real,
val2 double precision
);
Run Code Online (Sandbox Code Playgroud)
这是我使用字符串(文本)使用Python的地方:
# Just one row of data
num_row = [23253, 342, -15.336734, 2494627.949375]
import psycopg2
# Python3:
from io import StringIO
# Python2, use: from cStringIO import StringIO
conn = psycopg2.connect("dbname=mydb user=postgres")
curs = conn.cursor()
# Convert floating point numbers to text, write to COPY input
cpy = StringIO()
cpy.write('\t'.join([repr(x) for x in …Run Code Online (Sandbox Code Playgroud) 使用psycopg2包与python 2.7我一直得到标题错误:psycopg2.DatabaseError:SSL SYSCALL错误:检测到EOF
它只发生在WHERE column LIKE ''%X%''我的pgrouting查询中添加一个子句时.一个例子:
SELECT id1 as node, cost FROM PGR_Driving_Distance(
'SELECT id, source, target, cost
FROM edge_table
WHERE cost IS NOT NULL and column LIKE ''%x%'' ',
1, 10, false, false)
Run Code Online (Sandbox Code Playgroud)
互联网上的线程表明它是直观的SSL问题,但每当我注释掉模式匹配方面的事情时,查询和数据库的连接工作正常.
这是在运行Xubuntu 13.10的本地数据库上.
进一步调查后:看起来这可能是由于pgrouting扩展程序导致数据库崩溃,因为它是一个错误的查询,并且它们不是具有此模式的链接.
会很快发布一个答案......
我正在尝试运行alembic迁移,当我运行时
alembic revision --autogenerate -m "Added initial tables"
Run Code Online (Sandbox Code Playgroud)
它说不出来
sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver
Run Code Online (Sandbox Code Playgroud)
数据库网址是
postgresql+psycopg2://dev:passwd@localhost/db
Run Code Online (Sandbox Code Playgroud)
我甚至psycopg2安装在我的virtualenv中
$yolk -l
Flask-Login - 0.1.3 - active
Flask-SQLAlchemy - 0.16 - active
Flask - 0.9 - active
Jinja2 - 2.6 - active
Mako - 0.7.3 - active
MarkupSafe - 0.15 - active
Python - 2.7.2 - active development (/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload)
SQLAlchemy - 0.8.0 - active
Werkzeug - 0.8.3 - active
alembic - 0.4.2 - active
antiorm - 1.1.1 - active …Run Code Online (Sandbox Code Playgroud) 我第一次尝试与其他几个网站建立网站,并且在尝试使用Django/Python/VirtualEnv时遇到了一个奇怪的错误.我已经为其他操作系统找到了解决这个问题的方法,比如Ubuntu,但是找不到适合Mac的好解决方案.
这是正在运行的相关代码:
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
运行该块后,我收到以下错误:
Asse田
django-toolbelt的构建轮失败为psycopg2运行setup.py bdist_wheel
...
Asse田
psycopg2构建轮失败无法构建django-toolbelt psycopg2
我相信我已经安装了"django-toolbelt"和"psycopg2",所以我不确定它为什么会失败.
我能想到的唯一区别是我没有使用该命令
sudo apt-get install libpq-dev
Run Code Online (Sandbox Code Playgroud)
正如Ubuntu用法的指示,因为我相信用brew安装postgresql会处理标题.
感谢您的帮助或见解!
psycopg2 ×10
python ×9
postgresql ×6
django ×3
sqlalchemy ×2
alembic ×1
binary-data ×1
bulkinsert ×1
cursors ×1
insert ×1
performance ×1
pgrouting ×1
rdbms ×1
sql ×1
ssl ×1
virtualenv ×1