Heroku подключиться к базе данных MySQL - PullRequest
0 голосов
/ 02 сентября 2018

Я перенес проект python-django в heroku, и он работает хорошо. В моем файле view.py модели django я добавил функцию, которая может подключаться к локальной базе данных 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})

Но когда я пытаюсь открыть страницу с данными из базы данных mysql на развернутом веб-сайте heroku, появляется сообщение об ошибке: «OperationalError at / results / (2003, «Не удается подключиться к серверу MySQL на« localhost »([Errno 111] Отказано в соединении)») «. Как я могу создать этот проект heroku для подключения к моей локальной базе данных mysql? Или я должен выбрать альтернативу?

1 Ответ

0 голосов
/ 02 сентября 2018

Во-первых, вам необходимо убедиться, что имя пользователя и пароль, которые вы используете для подключения к MySQL, правильные и что у пользователя есть правильные привилегии для работы с выбранной базой данных. Затем вы можете проверить, что MySQL принимает соединения на локальном хосте.

Что касается прямой адресации исключения «Отказ в соединении», проверьте такие вещи, как сокет mysql, используемый для связи с приложениями localhost, такими как ваш проект Django. Сокет должен существовать и быть настроен в MySQL.

Я также рекомендую взглянуть на что-то вроде SQLAlchemy для 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 для выполнения запросов и обновлений, используя ее унаследованные функции из класса 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...