标签: psycopg2

在Python中的psycopg2中执行.sql模式

我有一个存储在.sql文件中的PostgreSQL架构.它看起来像:

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    facebook_id TEXT NOT NULL,
    name TEXT NOT NULL,
    access_token TEXT,
    created INTEGER NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

连接数据库后如何运行此模式?

我现有的Python代码适用于SQLite数据库:

# Create database connection
self.connection = sqlite3.connect("example.db")

# Run database schema
with self.connection as cursor:
    cursor.executescript(open("schema.sql", "r").read())
Run Code Online (Sandbox Code Playgroud)

但是psycopg2 executescript在光标上没有方法.那么,我怎样才能做到这一点?

python postgresql schema psycopg2

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

我在哪里可以用psycopg2 for Windows下载二进制蛋?

我正在寻找带有psycopg2二进制文件的二进制蛋用于Windows,但找不到任何.
http://initd.org/psycopg/download/上有唯一的源包和链接到Psycopg的Windows端口,它提供二进制安装程序,但没有二进制蛋.

我正在寻找二元蛋的原因是我想在virtualenv中安装psycopg并且它不是(这个答案描述了为什么它通常可能的),标准的Windows安装程序可以在注册表中查找已安装的Python.

旁注:我猜psycopg是一个相当受欢迎的库,它让我觉得奇怪的是不能在项目页面上提供二进制蛋.我在这里错过了什么吗?

python windows binary egg psycopg2

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

如何使用由南方管理的现有应用程序设置django-hstore?

我尝试使用这个很好的教程使用django-hstore .我在South管理的现有应用中添加了两个类:

class Attribute(models.Model):
    name  = models.CharField(max_length=200, verbose_name=_("name"))
    description = models.CharField(max_length=1000, verbose_name=_("description"))

class Measure(models.Model):
    attribute = models.ForeignKey(Attribute)
    data = hstore.DictionaryField(db_index=True)
    objects = hstore.HStoreManager()
Run Code Online (Sandbox Code Playgroud)

做了一个schemamigration --auto,启动了迁移并得到了一个django.db.utils.DatabaseError: type "hstore" does not exist.

好吧,tuto似乎不完整,django-hstore 文档告诉我使用自定义数据库后端,我将以下内容添加到我的设置文件中:

DATABASES['default']['ENGINE'] = 'django_hstore.postgresql_psycopg2'
Run Code Online (Sandbox Code Playgroud)

后来我有一个KeyError: 'default'south/db/__init__.py", line 78.此时,intertubes +一些试验/错误将我指向SOUTH_DATABASE_ADAPTERS设置变量,我在设置中添加了以下内容:

SOUTH_DATABASE_ADAPTERS = {'default': 'south.db.postgresql_psycopg2'}
Run Code Online (Sandbox Code Playgroud)

新错误:

File ".../psycopg2/extras.py", line 769, in register_hstore
"hstore type not found in the database. "
psycopg2.ProgrammingError: hstore type not found in the database. …
Run Code Online (Sandbox Code Playgroud)

python django psycopg2 hstore

21
推荐指数
2
解决办法
8521
查看次数

psycopg2将python字典插入为json

我想将一个python字典作为json插入到我的postgresql数据库中(通过python和psycopg2).我有:

thedictionary = {'price money': '$1', 'name': 'Google', 'color': '', 'imgurl': 'http://www.google.com/images/nav_logo225.png', 'charateristics': 'No Description', 'store': 'google'}

cur.execute("INSERT INTO product(store_id, url, price, charecteristics, color, dimensions) VALUES (%d, %s, %s, %d, %s, %s)", (1,  'http://www.google.com', '$20', thedictionary, 'red', '8.5x11'))
Run Code Online (Sandbox Code Playgroud)

它给出了错误消息:

thedictionary = {'price money': '$1', 'name': 'Google', 'color': '', 'imgurl': 'http://www.google.com/images/nav_logo225.png', 'charateristics': 'No Description', 'store': 'google'}

cur.execute("INSERT INTO product(store_id, url, price, charecteristics, color, dimensions) VALUES (%d, %s, %s, %d, %s, %s)", (1,  'http://www.google.com', '$20', thedictionary, 'red', '8.5x11'))
Run Code Online (Sandbox Code Playgroud)

我不知道如何从这里开始.我在互联网上找不到关于如何做这种事情的事情,我对psycopg2很新.

python postgresql dictionary psycopg2

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

如何在SQLAlchemy中设置连接超时

我试图找出如何设置连接超时create_engine(),到目前为止我已经尝试过:

create_engine(url, timeout=10)
Run Code Online (Sandbox Code Playgroud)

TypeError:使用配置PGDialect_psycopg2/QueuePool/Engine发送到create_engine()的无效参数'timeout'.请检查关键字参数是否适合此组件组合.

create_engine(url, connection_timeout=10)
Run Code Online (Sandbox Code Playgroud)

TypeError:使用配置PGDialect_psycopg2/QueuePool/Engine发送到create_engine()的无效参数'connection_timeout'.请检查关键字参数是否适合此组件组合.

create_engine(db_url, connect_args={'timeout': 10})
Run Code Online (Sandbox Code Playgroud)

(psycopg2.OperationalError)无效的连接选项"timeout"

create_engine(db_url, connect_args={'connection_timeout': 10})
Run Code Online (Sandbox Code Playgroud)

(psycopg2.OperationalError)无效的连接选项"connection_timeout"

create_engine(url, pool_timeout=10)
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

python postgresql sqlalchemy psycopg2

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

错误:无法从'10 .3'确定PostgreSQL版本 - 在Heroku上的Django

我试图从本地环境推送到Heroku主人.以前的提交没有新的要求.但是,我收到一条错误,说系统无法从"10.3"确定PostgreSQL版本.

这是我的要求清单:

amqp==1.4.9
anyjson==0.3.3
appdirs==1.4.3
awscli==1.11.89
billiard==3.3.0.23
boto==2.46.1
botocore==1.5.52
celery==3.1.25
Collectfast==0.5.2
colorama==0.3.7
dj-database-url==0.4.2
Django==1.11.1
django-celery==3.2.1
django-recaptcha==1.3.0
django-redis-cache==1.7.1
django-storages==1.5.2
django-storages-redux==1.3.2
docutils==0.13.1
gunicorn==19.7.0
honcho==0.5.0
jmespath==0.9.2
kombu==3.0.37
olefile==0.44
packaging==16.8
Pillow==4.3.0
psycopg2==2.6.2
pyasn1==0.2.3
pyparsing==2.2.0
python-dateutil==2.6.0
pytz==2018.3
PyYAML==3.12
redis==2.10.5
reportlab==3.4.0
rsa==3.4.2
s3transfer==0.1.10
selenium==3.4.0
six==1.10.0
vine==1.1.4
virtualenv==15.1.0
virtualenvwrapper-win==1.2.1
whitenoise==3.3.0
Run Code Online (Sandbox Code Playgroud)

以下是构建日志中的错误.

Collecting amqp==1.4.9 (from -r /tmp/build_28bcf3a327daae7657433628289c1501/requirements.txt (line 1))
         Downloading amqp-1.4.9-py2.py3-none-any.whl (51kB)
       Collecting anyjson==0.3.3 (from -r /tmp/build_28bcf3a327daae7657433628289c1501/requirements.txt (line 2))
         Downloading anyjson-0.3.3.tar.gz
       Collecting appdirs==1.4.3 (from -r /tmp/build_28bcf3a327daae7657433628289c1501/requirements.txt (line 3))
         Downloading appdirs-1.4.3-py2.py3-none-any.whl
       Collecting awscli==1.11.89 (from -r /tmp/build_28bcf3a327daae7657433628289c1501/requirements.txt (line 4))
         Downloading …
Run Code Online (Sandbox Code Playgroud)

git django postgresql psycopg2 heroku

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

如何加快PostgreSQL中的更新/替换操作?

我们有一个相当特殊的应用程序,它使用PostgreSQL 8.3作为存储后端(使用Python和psycopg2).我们对重要表执行的操作在大多数情况下都是插入或更新(很少删除或选择).

出于理智的原因,我们已经创建了我们自己的数据映射器层,它运行得相当好,但它有一个很大的瓶颈,即更新性能.当然,我不希望更新/替换场景像'插入空表'那样快速,但是接近它会很好.

请注意,此系统没有并发更新

我们总是在更新中设置每行的所有字段,这可以在我在测试中使用"替换"一词的术语中看到.到目前为止,我已经尝试了两种解决更新问题的方法:

  1. 创建一个replace()需要更新行数组的过程:

    CREATE OR REPLACE FUNCTION replace_item(data item[]) RETURNS VOID AS $$
    BEGIN
        FOR i IN COALESCE(array_lower(data,1),0) .. COALESCE(array_upper(data,1),-1) LOOP
           UPDATE item SET a0=data[i].a0,a1=data[i].a1,a2=data[i].a2 WHERE key=data[i].key;
        END LOOP;
    END;
    $$ LANGUAGE plpgsql
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个insert_or_replace规则,以便除偶尔删除之外的所有内容都成为多行插入

    CREATE RULE "insert_or_replace" AS
        ON INSERT TO "item"
        WHERE EXISTS(SELECT 1 FROM item WHERE key=NEW.key)
        DO INSTEAD
            (UPDATE item SET a0=NEW.a0,a1=NEW.a1,a2=NEW.a2 WHERE key=NEW.key);
    
    Run Code Online (Sandbox Code Playgroud)

这两者都加快了更新速度,虽然后者减慢了插入量:

Multi-row insert           : 50000 items inserted in  1.32 seconds averaging 37807.84 items/s
executemany() …
Run Code Online (Sandbox Code Playgroud)

python sql postgresql psycopg2

19
推荐指数
1
解决办法
5087
查看次数

SqlAlchemy:获取插入的最后一条记录的id

我在没有ORM的情况下使用SQLAlchemy,即使用手工制作的SQL statememts直接与后端db进行交互.在这种情况下,我使用PG作为我的后端数据库(psycopg2作为数据库驱动程序) - 我不知道这是否会影响答案.

我有这样的语句(为简洁起见,假设conn是与db的有效连接):

conn.execute("INSERT INTO user (name, country_id) VALUES ('Homer', 123)")
Run Code Online (Sandbox Code Playgroud)

还假设用户表由列组成(id [SERIAL PRIMARY KEY],name,country_id)

我怎样才能获得新用户的id(理想情况下,无需再次访问db?)

python postgresql sqlalchemy psycopg2

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

如何为Python 3.x安装psycopg2?

刚刚开始使用Python,我正在使用PyCharm开发一个带Django的Web应用程序.我已经安装了libpq-dev python-dev软件包,但它仍然给我带来了同样的错误:

./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

根据谷歌是没有安装python-dev软件包时出现的问题.请注意,我正在PyCharm界面中运行安装,以获得我为3.2和3.3创建的virtualenv(不确定如何从终端运行它).在virtualenv之外安装仍会引发相同的错误,即使我使用setup.py从终端安装它也是如此.如果我从终端运行pip install psycopg2,它会成功,但它会安装Python 2.7.根据他们的网站,他们支持Python 3.2.

python django psycopg2 pycharm python-3.x

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

使用python作为字典从postgresql查询

我正在使用Python 2.7和postgresql 9.1.试图从查询中获取字典,我已经尝试了这里描述的代码:http: //wiki.postgresql.org/wiki/Using_psycopg2_with_PostgreSQL

import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=mydb host=localhost user=user password=password")
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute ("select * from port")
type(cur.fetchall())
Run Code Online (Sandbox Code Playgroud)

它打印下一个答案:

<type 'list'>
Run Code Online (Sandbox Code Playgroud)

打印项目本身,告诉我它是列表.除外答案是字典.

编辑:

尝试下一个:

ans = cur.fetchall()[0]
print ans
print type(ans)
Run Code Online (Sandbox Code Playgroud)

回报

[288, 'T', 51, 1, 1, '192.168.39.188']
<type 'list'>
Run Code Online (Sandbox Code Playgroud)

python postgresql dictionary psycopg2 python-2.7

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