heroku连接到mysql数据库

时间:2018-09-02 02:26:03

标签: python mysql django heroku

我已经将python-django项目推送到heroku,并且效果很好。在我的Django模型的view.py文件中,我添加了可以连接到本地mysql数据库以从mysql检索数据的函数。功能是view.py如下:

@login_required 
def results(request):
    data=[]
    data1 = []
    owner = request.user
    owner = str(owner)
    db = MySQLdb.connect(user='root', db='aaa', passwd='xxxxx', host='localhost')
    cursor = db.cursor()
    cursor.execute("SELECT search_content, id, title, author, institute, FROM result_split where username = '%s'" % (owner))
    data = cursor.fetchall()
    db.close()
    return render(request, "webdevelop/results.html", {"datas": data})

但是当我尝试打开显示已部署的heroku网站中mysql数据库数据的页面时,它显示错误:“ / results /中的” OperationalError“ (2003,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)“)”。如何让这个heroku项目连接到本地mysql数据库?或者我应该选择其他方法? >

1 个答案:

答案 0 :(得分:0)

首先,您需要确保用于连接MySQL的用户名和密码正确,并且该用户具有使用所选数据库的正确特权。 然后,您可以检查mysql是否在localhost上接受连接。

对于直接解决Connection Refused异常,请检查用于与localhost项目(如Django项目)进行通信的mysql套接字之类的内容。该套接字必须存在并在MySQL中配置。

我还建议您看一下适用于Python的SQLAlchemy之类的东西,它将帮助您使用Python对象直接与数据库进行交互。例如,

连接到数据库:

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, scoped_session, mapper
from config import DB_URL


"""Database Declaration"""

metadata = MetaData()
Base = declarative_base(name='Base', mapper=mapper, metadata=metadata)

engine = create_engine(DB_URL, pool_recycle=1800)

Session = sessionmaker(bind=engine, autocommit=False, autoflush=True)
session = scoped_session(Session)

您现在可以使用session变量来使用其从SQLAlchemy Session类继承的函数来执行查询和更新。

SQLAlchemy还包括一个声明性模型,用于告知Python表的外观。例如,

class Clinic(Base):
    __tablename__ = 'clinic'

    clinic_id = Column(Integer, primary_key=True)
    clinic_name = Column(VARCHAR)
    address = Column(VARCHAR)
    city = Column(VARCHAR)
    zip = Column(VARCHAR)
    phone = Column(VARCHAR)
    user_id = Column(VARCHAR)

这些示例对于我在Flask中的项目很有效,并且在Django中也应该足够好。