标签: psycopg2

如何从 PostgreSQL 表中获取浮点值仅作为浮点而不是 psycopg2 中的小数?

我正在使用psycopg2来查询PostgreSQL数据库。

import psycopg2
import psycopg2.extras

DB_CONNECTION = {
  'host': os.getenv('PG_HOST'),
  'database': os.getenv('PG_DB_NAME'),
  'user': os.getenv('PG_USER'),
  'password': os.getenv('PG_PASSWORD')
}

connection = psycopg2.connect(**DB_CONNECTION)
connection.autocommit = True
cursor = connection.cursor(cursor_factory = psycopg2.extras.RealDictCursor)

# amount column type is numeric in table
query = 'SELECT userid, amount FROM some_table WHERE userid = %(userid)s'
cursor.execute(query, {'userid': 1234})
rows = cursor.fetchall()
print(rows[0]['amount']) # This is value is object of decimal.Decimal
Run Code Online (Sandbox Code Playgroud)

rows[0]['amount']decimal.Decimal类的对象。有没有简单干净的方法来获取这个值float?我不想float(rows[0]['amount'])手动将其转换为浮动。

python postgresql psycopg2

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

批量从postgres数据库中获取数据(python)

我有以下 Postgres 查询,我从 table1 中获取大约 2500 万行的数据,并希望将以下查询的输出写入多个文件。

query = """ WITH sequence AS (
                SELECT 
                        a,
                        b,
                        c
                FROM table1 )                    

select * from sequence;"""

Run Code Online (Sandbox Code Playgroud)

下面是用于获取完整数据集的 python 脚本。如何修改脚本以将其提取到多个文件(例如每个文件有 10000 行)

#IMPORT LIBRARIES ########################
import psycopg2
from pandas import DataFrame

#CREATE DATABASE CONNECTION ########################
connect_str = "dbname='x' user='x' host='x' " "password='x' port = x"
conn = psycopg2.connect(connect_str)
cur = conn.cursor()
conn.autocommit = True

cur.execute(query)
df = DataFrame(cur.fetchall())

Run Code Online (Sandbox Code Playgroud)

谢谢

python postgresql psycopg2

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

SqlAlchemy 在 where 子句中包含列表

我在数据库中的表如下

Username    city        Type 
 Anna       Paris        abc 
 Marc       london       abc
 erica      rome         AF 
 Sara       Newyork      cbd 
 silvia      paris        AD
Run Code Online (Sandbox Code Playgroud)

我有一个包含字符串值的列表

typelist = {'abc', 'cbd'}
Run Code Online (Sandbox Code Playgroud)

我想使用 sqlalchemy 查询数据库,从列类型等于列表中的值的表中获取数据:

Username    city        Type 
 Anna       Paris        abc 
 Marc       london       abc
 Sara       Newyork      cbd 
Run Code Online (Sandbox Code Playgroud)

我正在尝试这段代码

sql = "SELECT * FROM table WHERE data IN :values" 
query = sqlalchemy.text(sql).bindparams(values=tuple(typelist))
conn.engine.execute(query)
Run Code Online (Sandbox Code Playgroud)

但它只返回类型列表中的一个值,而不是所有列表值。

Username    city        Type 
 Sara       Newyork      cbd 
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy psycopg2 list bindparam

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

如何禁用psycopg2连接池?

我已经为postgres连接池配置了pgpool-II,我想禁用psycopg2连接池.我该怎么做呢?

谢谢!

python psycopg2

0
推荐指数
1
解决办法
1283
查看次数

psycopg2 COPY使用cursor.copy_from()冻结大输入

使用psycopg2 cursor对象考虑Python中的以下代码(为清楚起见,更改或省略了一些列名称):

filename='data.csv'
file_columns=('id', 'node_id', 'segment_id', 'elevated', 
              'approximation', 'the_geom', 'azimuth')
self._cur.copy_from(file=open(filename),
                    table=self.new_table_name, columns=file_columns)
Run Code Online (Sandbox Code Playgroud)
  • 数据库位于快速LAN上的远程计算机上.
  • 使用\COPYbash工作速度非常快,即使对于大型(~1,000,000行)文件也是如此.

这段代码超5000行,但data.csv超过10,000 行时,程序完全冻结.

任何想法\解决方案?

亚当

python postgresql psycopg2 large-data-volumes

0
推荐指数
1
解决办法
5350
查看次数

Postgres - Sql - PgSql Cheatsheets

我正在使用psycopg开发一些python查询,我正在寻找一些好的备忘单.

你在DB开发过程中经常使用哪些Postgres - Sql - PgSql Cheatsheets?

python sql postgresql psycopg2

0
推荐指数
1
解决办法
567
查看次数

没有足够的格式字符串参数

我试图在我的python脚本中传递一个sql(如果我在客户端上运行它完美的工作),但我收到错误"没有足够的格式字符串参数"

以下,代码:

sql = """
SELECT
  rr.iserver,
    foo.*, rr.queue_capacity,
    rr.queue_refill_level,
    rr.is_concurrent,
    rr.max_execution_threads,
    rr.retrieval_status,
    rr.processing_status
FROM
    (
        SELECT DISTINCT
            ip.package,
            it. TRIGGER
        FROM
            wip.info_package ip,
            wip.info_trigger it
        WHERE
            ip.service = it.service and
      ip.iserver = '%(iserver)s' and
      it.iserver = %(iserver)s'
        AND package = '%(package)s'
        UNION
            SELECT
                '%(package)s' AS package,
                TRIGGER
            FROM
                info_trigger
            WHERE
                TRIGGER LIKE '%(package)s%'
    ) AS foo,
    info_trigger rr
WHERE
    rr. TRIGGER = foo. TRIGGER
""" % {'iserver' : var_iserver,'package' : var_package}
dcon = Database_connection()
getResults = dcon.db_call(sql, dbHost, dbName, …
Run Code Online (Sandbox Code Playgroud)

python psycopg2

0
推荐指数
2
解决办法
3527
查看次数

使用psycopg2插入多行

根据psycopg2:使用一个查询插入多行,使用psycopg2的execute而不是executemany更有效.别人可以证实吗?

上面的StackOverflow问题建议使用mogrify来创建排序语句:

INSERT INTO table VALUES (value1, value2), (value3, value4)
Run Code Online (Sandbox Code Playgroud)

是否可以使用常规执行函数生成这样的语句?我想到了一些形式

cursor.execute("""INSERT INTO table VALUES (%s, %s), (%s, %s)""", ((value1,value2),(value3,value4)))
Run Code Online (Sandbox Code Playgroud)

会工作.

更新:

例如,我尝试传入执行sql语句:

insert into history (timestamp) values (%s),(%s); 
Run Code Online (Sandbox Code Playgroud)

与下面的元组:

(('2014-04-27 14:07:30.000000',), ('2014-04-27 14:07:35.000000',))
Run Code Online (Sandbox Code Playgroud)

但我得到的只是错误:

没有结果要取

python postgresql psycopg2 python-db-api

0
推荐指数
1
解决办法
6224
查看次数

使用百分号登录列名称更新表

我用psycopg2连接到了Postgresql数据库。我正在尝试更新列,但是列名称中有一个百分号(我不能更改)。

我正在尝试做:

QRY = """update X set "foo%" = %s"""
cursor.execute(QRY, some_value)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用。psycopg2给出有关列表索引超出范围的奇怪错误。我该如何正确逃脱呢?

python postgresql psycopg2

0
推荐指数
1
解决办法
242
查看次数

row_to_json和psycopg2.fetchall()结果是列表中的列表,而不是列表中的字典

我使用Postgres的row_to_json()函数以json对象的形式检索数据,以便像使用python字典一样处理结果。

conn = psycopg2.connect("<My_DB_DSN>")
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
query_sql = "SELECT row_to_json(row) FROM (SELECT id, name FROM products) row;" 
cur.execute(query_sql)
results = cur.fetchall()
print(results)
Run Code Online (Sandbox Code Playgroud)

结果是:

 [ [{"id": 1, "name": "Bob"}],
   [{"id": 2, "name": "Susan"}]
 ]
Run Code Online (Sandbox Code Playgroud)

我期待着这个结果:

 [ {"id": 1, "name": "Bob"},
   {"id": 2, "name": "Susan"}
 ]
Run Code Online (Sandbox Code Playgroud)

知道为什么我会得到第一个结果以及如何解决这个问题吗?

在postgres的命令行中运行SQL查询将按预期返回json:

{"id": 1, "name": "Bob"},
{"id": 2, "name": "Susan"}
Run Code Online (Sandbox Code Playgroud)

postgresql json psycopg2

0
推荐指数
1
解决办法
2339
查看次数