4

我正在尝试实现此代码https://gist.github.com/1859653,它允许 sqlalchemy 与 hstore 列进行交互。

它在该要点的评论中提到需要运行 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 索引。

4

2 回答 2

7

从 SQLAlchemy 0.8 开始,psycopg2PostgreSQL 的连接器(默认)将默认注册 hstore 扩展apply_driver_hacks不再需要解决方法。

此外,SQLAlchemy 0.8+ 具有内置HSTORE类型支持。

于 2013-04-20T18:07:17.923 回答
4

试试这个:

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)

另见:

于 2012-10-02T03:31:53.197 回答