简体   繁体   中英

psycopg2 register_composite from sqlalchemy

is it possible to somehow use function register_composite from psycopg2, when i am using sqlalchemy to connect to postgresql database?

My problem is that I want SQLAlchemy to handle custom composite type that i created in postgresql like this:

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

Sqlalchemy returns me values of this type as an string and I would like to somhow learn sqlalchemy my new type. If found some information about creating custom composite types in SQL alchemy ORM, but I am using just SQLAlechemy Core API (not ORM) and somebody on sqlalchemy IRC told me that psycopg should do it for me.

I would be happy with any advice, that would solve this.

Thank you Josh

You can use the psycopg2 function register_composite from sqlalchemy but you have to

import psycopg2.extras

yourself, then with your connection object c from

c = e.connect()

just do

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

You have to use c.connection because

>>> hasattr(c.connection, 'cursor')
True

Ok so, I will answer myself :)

I have not found any way how to access to method register_composite of psycopg2 from sqlalchemy core api. But i am able to register new type via psycopg2 methods new_type and register_adapter. Tutorial can be found here . This methods allows you to register mapping from sql representation to python class and the other way.

From SQLAlechemy connection you can access these methods like this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM