我已经将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数据库?或者我应该选择其他方法? >
答案 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中也应该足够好。