Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python heroku连接到mysql数据库_Python_Mysql_Django_Heroku - Fatal编程技术网

Python heroku连接到mysql数据库

Python heroku连接到mysql数据库,python,mysql,django,heroku,Python,Mysql,Django,Heroku,我已经向heroku推出了一个python django项目,它运行良好。在django模型的my view.py文件中,我添加了可以连接到本地mysql数据库以从mysql检索数据的函数。函数为view.py,如下所示: @login_required def results(request): data=[] data1 = [] owner = request.user owner = str(owner) db = MySQLdb.connect

我已经向heroku推出了一个python django项目,它运行良好。在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数据库数据的页面时,它会显示错误:“OperationalErrorat/results/
(2003,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)”)。我如何让这个heroku项目连接到我的本地mysql数据库?或者我应该选择替代方案?

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

至于直接寻址连接被拒绝的异常,请检查用于与本地主机应用程序(如Django项目)通信的mysql套接字。套接字必须存在并在MySQL中配置

我还建议看一看类似SQLAlchemy for Python的东西,它将帮助您使用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)
连接到数据库:

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中应该足够有效

谢谢你的回复。关于“用于与Django项目等本地主机应用程序通信的mysql套接字”,您能更具体地描述一下吗?如何检查套接字必须存在并在MySQL中配置?很抱歉,我是这方面的新手。OP提到他们正在使用Django,所以所有关于sqlalchemy的东西都是无关紧要的。您也没有注意到提到Heroku,它不会在localhost上运行db。谢谢。那么我如何应用mysql数据库呢?此外,django项目还有一个使用本地python文件的函数。如何在heroku中导入文件?我之所以包含SQLAlchemy,是因为有人说Django的ORM不适合复杂的数据库操作。这只是我的经验中的一个建议。你能建议我连接到我的本地mysql数据库或任何其他选择吗?这里有很多错误。您希望如何在本地主机上连接到mysql?Heroku不会在与应用程序相同的服务器上运行数据库。为什么您要显式地修改为db,而不是使用models API?