psycopg2 register_composite от sqlalchemy - PullRequest
2 голосов
/ 30 августа 2011

возможно ли как-то использовать функцию register_composite из psycopg2, когда я использую sqlalchemy для подключения к базе данных postgresql?

Моя проблема в том, что я хочу, чтобы SQLAlchemy обрабатывал пользовательский составной тип, которыйЯ создал в Postgresql, как это:

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

Sqlalchemy возвращает мне значения этого типа в виде строки, и я хотел бы Somhow узнать sqlalchemy мой новый тип.Если бы я нашел некоторую информацию о создании пользовательских составных типов в SQL-алхимии ORM, но я использую только SQLAlechemy Core API (не ORM), а кто-то из sqlalchemy IRC сказал мне, что psycopg должен сделать это для меня.

Я был быдоволен любым советом, который решит эту проблему.

Спасибо, Джош

Ответы [ 2 ]

3 голосов
/ 17 сентября 2012

Вы можете использовать функцию psycopg2 register_composite из sqlalchemy, но вам нужно

import psycopg2.extras

самостоятельно, затем с вашим объектом соединения c из

c = e.connect()

просто сделайте

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

Вы должны использовать c.connection, потому что

>>> hasattr(c.connection, 'cursor')
True
3 голосов
/ 08 сентября 2011

Ладно, я сам отвечу :) 1001 *

Я не нашел способа доступа к методу register_composite psycopg2 из sqlalchemy core api. Но я могу зарегистрировать новый тип с помощью методов psycopg2 new_type и register_adapter. Учебник можно найти здесь . Этот метод позволяет зарегистрировать отображение из представления sql в класс python и другим способом.

Из соединения SQLAlechemy вы можете получить доступ к следующим методам:

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
...