我正在使用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'])手动将其转换为浮动。
我有以下 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)
谢谢
我在数据库中的表如下
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) 我已经为postgres连接池配置了pgpool-II,我想禁用psycopg2连接池.我该怎么做呢?
谢谢!
使用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)
\COPYbash工作速度非常快,即使对于大型(~1,000,000行)文件也是如此.这段代码超5000行,但data.csv超过10,000 行时,程序完全冻结.
任何想法\解决方案?
亚当
我正在使用psycopg开发一些python查询,我正在寻找一些好的备忘单.
你在DB开发过程中经常使用哪些Postgres - Sql - PgSql Cheatsheets?
我试图在我的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) 根据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)
但我得到的只是错误:
没有结果要取
我用psycopg2连接到了Postgresql数据库。我正在尝试更新列,但是列名称中有一个百分号(我不能更改)。
我正在尝试做:
QRY = """update X set "foo%" = %s"""
cursor.execute(QRY, some_value)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用。psycopg2给出有关列表索引超出范围的奇怪错误。我该如何正确逃脱呢?
我使用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)