【问题标题】:heroku connect to mysql databaseheroku 连接到 mysql 数据库
【发布时间】:2018-09-02 02:26:03
【问题描述】:

我已经将一个 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 数据库的数据的页面时,它显示错误:“OperationalError at /results/ (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection denied)")"。我怎样才能让这个 heroku 项目连接到我的本地 mysql 数据库?或者我应该选择替代方案?

【问题讨论】:

  • 这里有很多问题。您希望如何连接到 localhost 上的 mysql? Heroku 不会在与您的应用程序相同的服务器上运行数据库。购买你为什么要明确地更正到一个数据库而不是使用模型 API?

标签: python mysql django heroku


【解决方案1】:

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

至于直接解决 Connection Refused 异常,请检查用于与 Django 项目等本地应用程序通信的 mysql 套接字之类的东西。套接字必须存在并在 MySQL 中配置。

我还建议看一下 SQLAlchemy for Python 之类的东西,它可以帮助您使用 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 中运行良好。

【讨论】:

  • 感谢您的回复。您能否更具体地了解“用于与 Django 项目等本地应用程序通信的 mysql 套接字”?我如何检查套接字必须存在并在 MySQL 中配置?抱歉,我是这方面的大一新生。
  • OP 提到他们正在使用 Django,所以关于 sqlalchemy 的所有这些东西都是无关紧要的。而且您也没有注意到 Heroku 的提及,它不会在 localhost 上运行数据库。
  • 谢谢。那么如何应用mysql数据库呢?此外,django 项目有一个使用本地 python 文件的功能。如何在 heroku 中导入文件?
  • 我包含 SQLAlchemy 的原因是因为有人说 Django 的 ORM 不适合复杂的数据库操作。这只是根据我的经验提出的建议。
  • 您能否建议连接到我的本地 mysql 数据库或任何其他替代方案?
猜你喜欢
  • 2015-11-13
  • 2014-03-04
  • 1970-01-01
  • 2013-09-10
  • 2019-03-03
  • 1970-01-01
  • 2010-12-11
相关资源
最近更新 更多