标签: psycopg2

psycopg2、SELECT 和模式

我正在尝试对作为“dam_vector”模式一部分的表执行简单的选择语句。我得到的错误是:

psycopg2.ProgrammingError:关系“dam_vector.parcels_full”不存在第1行:SELECT * FROM“dam_vector.parcels_full”

我无法弄清楚这一点,并且知道我遗漏了一些明显的东西。您能提供的任何帮助都会很棒。

这是我正在使用的代码。db 是成功连接到数据库的连接字符串。

cur = db.cursor()
query = 'SELECT * FROM "dam_vector.parcels_full"'
cur.execute(query)
results = cur.fetchall()
Run Code Online (Sandbox Code Playgroud)

当那失败了,在我对谷歌做了一些研究之后,我尝试了这个。同样的错误。

cur.execute("SET search_path TO dam_vector,public")
db.commit()

cur = db.cursor()
query = 'SELECT * FROM "parcels_full"'
cur.execute(query)
results = cur.fetchall()
Run Code Online (Sandbox Code Playgroud)

python psycopg2

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

PL/Python 或 Psycopg2

我有一个 Postgresql 9.1 服务器,我想在 Python 上编写一些函数。

有两种方法:plpypsycopg2。对我来说,在 plpy 中编写函数就像噩梦,很多“准备”和“执行”方法......使用起来更舒服psycopg2,但我关心效率。

在服务器上使用 psycopg2 是否正确?

postgresql psycopg2 plpython

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

在 SQLAlchemy 中按 Postgres 范围类型过滤/排序

SQLAlchemy的支持Postgres的范围的类型,如所描述的在这里。它使用postgresql+psycopg2方言进行 Postgres 通信。这些测试用例给出了 SQLALchemy 中范围类型的使用示例。

如何过滤或排序 SQLAlchemy 中此类范围字段的一个组件(较低或较高)?

使用第一个链接中的示例

from psycopg2.extras import DateTimeRange
from sqlalchemy.dialects.postgresql import TSRANGE

class RoomBooking(Base):

  __tablename__ = 'room_booking'

  room = Column(Integer(), primary_key=True)
  during = Column(TSRANGE())

booking = RoomBooking(
  room=101,
  during=DateTimeRange(datetime(2013, 3, 23), None)
)
Run Code Online (Sandbox Code Playgroud)

例如,我想过滤在给定日期时间开始的期间的预订,或者在日期时间开始之前对预订进行排序。

因此,我希望大致生成此 SQL:

SELECT room, during
FROM room_booking
WHERE lower(during) = foo
ORDER BY upper(during)
Run Code Online (Sandbox Code Playgroud)

我试过像这样的结构

RoomBooking.query.filter(RoomBooking.during.lower == foo).order_by(RoomBooking.during.upper)
Run Code Online (Sandbox Code Playgroud)

但要认识到这可能不起作用,因为 lower 是 python 对象上的一个属性,与基础表列无关。

一个可能的解决方案可能是找到一种使用upper()/lower()SQLAlchemy 范围函数的方法。

python postgresql sqlalchemy psycopg2

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

(psycopg2.OperationalError) 无法连接到服务器:连接被拒绝是服务器

我正在尝试连接两个 docker 容器,一个是 posgresql,另一个是 python Flask 应用程序。两者都正确链接,python 应用程序中的所有连接变量都直接取自 postgres 容器中通过链接公开的变量,并且与检查 postgresql 容器时发现的变量相同。当我将 psql 与连接字符串中的确切参数一起使用时,即:

psql -p 5432 -h 172.17.0.2 -d mydb -U user
Run Code Online (Sandbox Code Playgroud)

连接到 postgres 容器中的数据库是成功的,所以我知道 postgres 正在通过指定的端口等正确通信。但是,当我尝试通过具有相同连接变量的烧瓶连接到数据库时,我收到此错误:

回溯(最近一次调用):文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py”,第 1122 行,在 _do_get 中 return self._pool.get(wait, self._timeout)文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/util/queue.py”,第 145 行,在 get raise Empty sqlalchemy.util.queue.Empty

在处理上述异常的过程中,又发生了一个异常:

回溯(最近一次调用):文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/base.py”,第 2138 行,在 _wrap_pool_connect return fn() 文件“/usr/local/ lib/python3.6/site-packages/sqlalchemy/pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py" py”,第 766 行,在 _checkout 仙女 = _ConnectionRecord.checkout(pool) 文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py”,第 516 行,在 checkout rec = pool._do_get () 文件“/usr/local/lib/python3.6/site-packages/sqlalchemy/pool.py”,第 1138 行,在 _do_get self._dec_overflow() 文件“/usr/local/lib/python3.6/site …

python postgresql psycopg2 flask-sqlalchemy docker

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

返回列表中的字典,其中字典键等于值

我有一个数据库表,其中包含要合并的数以千计的近似重复项。我psycopg2.extras用来执行查询并最终在字典列表中获得结果。

dict_cur = conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
query = """SELECT DISTINCT pat_uid, pat_first_name, pat_last_name, pat_dob_dt, pat_chi_no,
       pat_addr, wtg_uid, wtg_pat_uid, std_uid, std_pat_uid, work_uid, work_pat_uid
       from ((patients left outer join waiting 
       on (pat_uid = wtg_pat_uid)) left outer join studies 
       on (std_pat_uid = pat_uid) left outer join worklist
       on (work_pat_uid = pat_uid)) 
       where (pat_first_name, pat_last_name, pat_chi_no)
       in (SELECT pat_first_name, pat_last_name, pat_chi_no from patients 
       group by pat_first_name, pat_last_name, pat_chi_no
       HAVING count(*) >= 2) AND
       pat_chi_no ~ '^[0-9]{10,10}\$'
       order by pat_last_name asc, pat_first_name asc,
       pat_dob_dt asc""" …
Run Code Online (Sandbox Code Playgroud)

python psycopg2

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

psycopg2 - 更新 Json 列时如何转义单引号?

我正在尝试更新表的 json 列,但由于 json 中的一个值有单引号而卡住了。

我的 json 字符串看起来像这样

{"keyword": "women's shoes"}
Run Code Online (Sandbox Code Playgroud)

这是我的代码。

criteria_str = json.dumps(criteria)
sql_str = """update user_saved_search_backup set criteria = '%s'::json where id = %d;""" % (criteria_str, id)                    
write_cursor.execute(sql_str)
Run Code Online (Sandbox Code Playgroud)

注意:我使用的是缺少 json 函数支持的 postgreSQL 9.2,所以我必须在 python 中执行此操作

任何帮助,将不胜感激。

python sql postgresql psycopg2

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

使用 psycopg2 如何避免使用连接上下文管理器

使用 psycopg2,连接和查询数据库的工作方式如下

conn = psycopg2.connect('connection string')
with conn:
    cur=conn.cursor()
    cur.execute("SELECT * FROM pg_stat_activity") #simple query 
    rows = cur.fetchall()
    for row in rows:
       print (row)
Run Code Online (Sandbox Code Playgroud)

经过反复试验,我发现这with conn是绝对必要的,否则你会得到很多无法解释的锁。

我的问题是:有没有办法设置连接以避免使用它?

python postgresql psycopg2

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

asyncpg SELECT WHERE IN 给出 postgresSyntaxError

在我使用 asyncpg 的 python 代码中,我将元组 ('PENDING',) 传递到 where-in 查询中,该查询记录为:

args=('TYPE_1', ('PENDING',))

query=SELECT * FROM actions where type = $1 AND status IN $2
Run Code Online (Sandbox Code Playgroud)

似乎 sql 查询最终应该是

SELECT * FROM actions where type = TYPE_1 AND status in ('PENDING',);
Run Code Online (Sandbox Code Playgroud)

但上面的代码导致:

asyncpg.exceptions.PostgresSyntaxError: syntax error at or near "$2"
Run Code Online (Sandbox Code Playgroud)

我认为这可能是因为元组中的尾随逗号,但我不知道如何摆脱它..

python postgresql psycopg2 asyncpg

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

错误:找不到 pg_config 可执行文件我尝试使用 python3.7 pip3 psycopg2

我使用的是 aws linux ,默认的 python 是 2.7 我安装了 3.7 并且现在在我做 python -V 时更改了别名 python=python3 我得到:Python 3.7.6。我运行 pip3 install psycopg2

并得到:

pip3 install psycopg2
Defaulting to user installation because normal site-packages is not writeable
Collecting psycopg2
  Using cached psycopg2-2.8.5.tar.gz (380 kB)
    ERROR: Command errored out with exit status 1:
     command: /bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-b3bpay2i/psycopg2/setup.py'"'"'; __file__='"'"'/tmp/pip-install-b3bpay2i/psycopg2/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-3c18jwyz
         cwd: /tmp/pip-install-b3bpay2i/psycopg2/
    Complete output (23 lines):
    running egg_info
    creating /tmp/pip-pip-egg-info-3c18jwyz/psycopg2.egg-info
    writing /tmp/pip-pip-egg-info-3c18jwyz/psycopg2.egg-info/PKG-INFO
    writing …
Run Code Online (Sandbox Code Playgroud)

postgresql client psycopg2 amazon-web-services python-3.x

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

用于 psycopg2 的 AWS Lambda 层

我正在尝试创建一个新的 lambda 层以使用 psycopg2 导入 zip 文件,因为该库使我的部署包超过 3MB,而且我再也看不到 lambda 函数中的内联代码。

我使用 Python 3.7 为以下两种情况创建了 lambda 层:

  • psycopg2_lib.zip(包含 psycopg2、psycopg2_binary.libs 和 psycopg2_binary-2.8.5.dist-info 文件夹)
  • psycopg2_only.zip 仅包含 psycopg2 文件夹。

我将他们新创建的层添加到我的 lambda 函数中。但是,在这两种情况下,我的 lambda_function 都会抛出如下错误:{ "errorMessage": "Unable to import module 'lambda_function': No module named 'psycopg2'", "errorType": "Runtime.ImportModuleError" }

该错误似乎是我的 zip 文件出了问题,无法识别。但是当它在我的部署包中运行良好时。

任何帮助或理由都会非常有用。谢谢!

psycopg2 aws-lambda python-3.7 aws-lambda-layers

0
推荐指数
3
解决办法
1893
查看次数

无法从本地计算机连接到 AWS RDS PostgreSQL 实例

我已创建启用公共访问的 AWS RDS PostgreSQL 实例,但无法连接到它。这是我的代码:

try:
   conn = psycopg2.connect(dbname="elevate_permission",
                            user="postgres",
                            password="password123",
                            host="database-1.ce2ilrafe9ry.ap-southeast-1.rds.amazonaws.com")
   print("Connected to DB")
except psycopg2.OperationalError as e:
   logger.error(e)
   sys.exit()
Run Code Online (Sandbox Code Playgroud)

端点和端口 数据库名称、用户名和密码

编辑 我已将上述异常添加到上面的代码中,这是我收到的错误消息:

操作超时。服务器是否在该主机上运行并接受 TCP/IP 连接?

python postgresql psycopg2 amazon-web-services

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

SELECT 语句遇到错误后需要提交(或回滚)

当语句中遇到错误时SELECT,显然TRANSACTION保持打开状态。

与 psycopg 建立联系:

# ...
connection.autocommit = False
cur = connection.cursor(cursor_factory=DictCursor)
Run Code Online (Sandbox Code Playgroud)

选择不存在的表:

cur.execute('SELECT * FROM "non_exists_table"') # a incorrect query
Run Code Online (Sandbox Code Playgroud)
psycopg2.errors.UndefinedTable: relation "non_exists_table" does not exist
Run Code Online (Sandbox Code Playgroud)

然后执行另一个查询:

psycopg2.errors.UndefinedTable: relation "non_exists_table" does not exist
Run Code Online (Sandbox Code Playgroud)
psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block
Run Code Online (Sandbox Code Playgroud)

为什么?

是否为所有人psycopg2开放交易execute()?甚至SELECT?!!

是否可以避免在选择查询中启动TRANSACTION

python postgresql psycopg2

-2
推荐指数
1
解决办法
1395
查看次数

在PSycopg2/Postgres上执行查询时展开Timeout

我正在处理需要数小时才能执行的复杂查询.我正在使用PSycopg2

通过阅读这篇文章.我补充说:

 import os.environ
    ['PGOPTIONS'] = '-c statement_timeout=1000000'
Run Code Online (Sandbox Code Playgroud)

现在,我每次都收到错误,执行此查询:

import psycopg2
>>> cnn = psycopg2.connect("dbname=test options='-c statement_timeout=1000'")
>>> cur = cnn.cursor()
>>> cur.execute("select pg_sleep(200000)")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
psycopg2.extensions.QueryCanceledError: canceling statement due to statement timeout
Run Code Online (Sandbox Code Playgroud)

我的问题:如何强制应用程序花费很长时间来处理查询?

sql postgresql psycopg2

-3
推荐指数
1
解决办法
3513
查看次数