heroku连接到mysql数据库

wa7juj8i  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(303)

我把一个pythondjango项目推到heroku上,效果很好。在django模型的my 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,“cannot connect to mysql server on'localhost'([errno 111]connection denied)”)”。我怎样才能让这个heroku项目连接到我的本地mysql数据库?或者我应该选择另一个?

dwbf0jvd

dwbf0jvd1#

首先,您需要确保用于连接mysql的用户和密码是正确的,并且该用户具有使用所选数据库的正确权限。然后可以检查mysql是否接受localhost上的连接。
至于直接寻址连接被拒绝的异常,请检查mysql套接字之类的东西,它用于与本地主机应用程序(如django项目)通信。套接字必须存在并在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会话类继承的函数执行查询和更新。
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中应该足够有效。

相关问题