psycopg2在SQLAlchemy中的register_composite

3

当我使用SQLAlchemy连接到PostgreSQL数据库时,是否可以以某种方式使用psycopg2的函数register_composite

我的问题是,我想让SQLAlchemy处理我在PostgreSQL中创建的自定义复合类型,就像这样:

CREATE TYPE card AS (value int, suit text);

Sqlalchemy以字符串形式返回此类型的值,我希望以某种方式了解sqlalchemy我的新类型。我在SQLAlchemy Core API中找到了一些关于创建自定义复合类型的信息,但我只是使用SQLAlechemy Core API(不是ORM),有人在sqlalchemy IRC上告诉我psycopg应该为我做这件事。如果有任何解决方法,我会很高兴。谢谢Josh。
2个回答

5
您可以使用SQLAlchemy中的psycopg2函数register_composite,但您需要:
import psycopg2.extras

首先使用c连接对象连接到自己的数据库:

c = e.connect()

只需执行

psycopg2.extras.register_composite('card', c.connection, globally=True)

你需要使用c.connection,因为它与数据库建立了连接。
>>> hasattr(c.connection, 'cursor')
True

3

好的,我来回答 :)

我没有找到使用SQLAlchemy核心API访问psycopg2方法register_composite的方法。但是,我可以通过psycopg2方法new_type和register_adapter注册新类型。教程可以在这里找到。

这些方法允许您注册从SQL表示到Python类的映射以及反之。

从SQLAlchemy连接中,您可以像这样访问这些方法:

from sqlalchemy import *
e = create_engine("postgresql://xxx:xxx@localhost:5432/db")
c = e.connect()
c.dialect.dbapi.extensions.register_adapter
c.dialect.dbapi.extensions.new_type

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接