创建基于psycopg3的SQLAlchemy引擎

s.k*_*s.k 15 python sqlalchemy psycopg2 psycopg3

我需要将以下代码升级为基于psycopg版本 3 的等效代码:

import psycopg2
from sqlalchemy import create_engine

engine = create_engine('postgresql+psycopg2://', creator=connector)
Run Code Online (Sandbox Code Playgroud)

这个 psycopg2 URL 很有魅力,但是:

import psycopg # v3.1
from sqlalchemy import create_engine

engine = create_engine('postgresql+psycopg://', creator=connector)
Run Code Online (Sandbox Code Playgroud)

(我也尝试过“psycopg3”这个词但没有成功)

返回:

Traceback (most recent call last):

  File "/tmp/ipykernel_1032556/253047102.py", line 1, in <cell line: 1>
    engine = create_engine('postgresql+psycopg://', creator=connector)

  File "<string>", line 2, in create_engine

  File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/deprecations.py", line 309, in warned
    return fn(*args, **kwargs)

  File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/engine/create.py", line 534, in create_engine
    entrypoint = u._get_entrypoint()

  File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/engine/url.py", line 661, in _get_entrypoint
    cls = registry.load(name)

  File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/langhelpers.py", line 343, in load
    raise exc.NoSuchModuleError(

NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgresql.psycopg
Run Code Online (Sandbox Code Playgroud)

那么,如何正确创建基于psycopg(v3.x)的SQLAlchemy引擎呢?

我的sqlalchemy版本是:“1.4.35”(尝试过的版本1.4.40但遇到AttributeError: module 'sqlalchemy' has no attribute 'dialects'错误)。

psycopg3 文档: https: //www.psycopg.org/psycopg3/docs/api/
sqlalchemy 文档: https: //docs.sqlalchemy.org/en/14/core/engines.html

sao*_*lof 20

只是对当前答案的更新:Sqlalchemy 2.0 已发布,并且它确实支持 psycopg3。您需要升级到2.0才能使用它。

请注意,连接字符串必须从 更改为 ,postgresql否则postgresql+psycopgSqlAlchemy 将(在撰写本文时)尝试使用psycopg2.

有关更多信息,请参阅此处的文档:https://docs.sqlalchemy.org/en/20/dialects/postgresql.html#module-sqlalchemy.dialects.postgresql.psycopg


Fra*_*ran 4

SQLAlchemy 不支持 1.4.x 系列中的 psycopg3。+ 符号后面的部分是 sqlalchemy.dialects.postgresql.{engine} 内的包,其中 engine 是 psycopg2、asyncpg 或其他。

其他方言的工作方式相同。

但1.4.x系列中没有psycopg或psycopg3驱动程序。