Как использовать столбец Hstore Postgres с flask-sqlalchemy?

Я пытаюсь реализовать этот код https://gist.github.com/1859653, который позволяет sqlalchemy взаимодействовать со столбцом hstore.

В комментариях к этому gist упоминается необходимость запуска psycopg2.extras.register_hstore. Когда и где следует запускать эту функцию? Если я сделаю:

@app.before_request
def reg_hstore() :
register_hstore(db.engine.raw_connection(), True)

ошибки heroku со «слишком большим количеством подключений»

также упоминается использование pghstore (http://pypi.python.org/pypi/pghstore) вместо psycopg2, но не указано, как его настроить.

Кроме того, мне интересно, поддерживается ли использование индексов hstore в этом коде надстройки.


person chrickso    schedule 24.09.2012    source источник
comment
Армин ответил, что лучшее место для этого кода может быть в функции get_engine flask-alchemy. Кто-нибудь знает, как я могу получить доступ к этому, чтобы добавить функцию register_hstore?   -  person chrickso    schedule 24.09.2012


Ответы (2)


Попробуй это:

from flaskext.sqlalchemy import SQLAlchemy
import psycopg2
import psycopg2.extras

class _SQLAlchemy(SQLAlchemy):
    def apply_driver_hacks(self, app, info, options):
        """This method adds option to support hstore on psycopg2"""

        if info.drivername == "postgres":
            def _connect():
                conn = psycopg2.connect(user=info.username,
                                        host=info.host,
                                        port=info.port,
                                        dbname=info.database,
                                        password=info.password)
                psycopg2.extras.register_hstore(conn)
                return conn
            options["creator"] = _connect
        SQLAlchemy.apply_driver_hacks(self, app, info, options)

Также см:

person longfin    schedule 02.10.2012
comment
у меня это работает, и, кажется, работает отлично. бесконечно благодарен! - person chrickso; 03.10.2012
comment
FWIW, мое имя драйвера было postgresql, а не postgres - person Jökull; 09.10.2012

Начиная с SQLAlchemy 0.8, psycopg2 коннектор для PostgreSQL (по умолчанию) будет регистрироваться hstore по умолчанию, и обходной путь apply_driver_hacks больше не нужен.

Кроме того, SQLAlchemy 0.8+ имеет встроенную поддержку типа HSTORE.

person plaes    schedule 20.04.2013