我正在尝试对作为“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) 我有一个 Postgresql 9.1 服务器,我想在 Python 上编写一些函数。
有两种方法:plpy或psycopg2。对我来说,在 plpy 中编写函数就像噩梦,很多“准备”和“执行”方法......使用起来更舒服psycopg2,但我关心效率。
在服务器上使用 psycopg2 是否正确?
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 范围函数的方法。
我正在尝试连接两个 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 …
我有一个数据库表,其中包含要合并的数以千计的近似重复项。我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) 我正在尝试更新表的 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 中执行此操作
任何帮助,将不胜感激。
使用 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是绝对必要的,否则你会得到很多无法解释的锁。
我的问题是:有没有办法设置连接以避免使用它?
在我使用 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)
我认为这可能是因为元组中的尾随逗号,但我不知道如何摆脱它..
我使用的是 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) 我正在尝试创建一个新的 lambda 层以使用 psycopg2 导入 zip 文件,因为该库使我的部署包超过 3MB,而且我再也看不到 lambda 函数中的内联代码。
我使用 Python 3.7 为以下两种情况创建了 lambda 层:
我将他们新创建的层添加到我的 lambda 函数中。但是,在这两种情况下,我的 lambda_function 都会抛出如下错误:{ "errorMessage": "Unable to import module 'lambda_function': No module named 'psycopg2'", "errorType": "Runtime.ImportModuleError" }
该错误似乎是我的 zip 文件出了问题,无法识别。但是当它在我的部署包中运行良好时。
任何帮助或理由都会非常有用。谢谢!
我已创建启用公共访问的 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 连接?
当语句中遇到错误时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?
我正在处理需要数小时才能执行的复杂查询.我正在使用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)
我的问题:如何强制应用程序花费很长时间来处理查询?
psycopg2 ×13
postgresql ×10
python ×9
sql ×2
asyncpg ×1
aws-lambda ×1
client ×1
docker ×1
plpython ×1
python-3.7 ×1
python-3.x ×1
sqlalchemy ×1