我正在尝试实现允许sqlalchemy与hstore列交互的代码https://gist.github.com/1859653。
在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索引。
答案 0 :(得分:5)
自SQLAlchemy 0.8以来,PostgreSQL的psycopg2
连接器(默认情况下为will register hstore extension默认情况下为{{3}},并且不再需要apply_driver_hacks
解决方法。
此外,SQLAlchemy 0.8+内置HSTORE
类型支持。
答案 1 :(得分: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)
另见: