【问题标题】:How can I connect python to MySQL server如何将 python 连接到 MySQL 服务器
【发布时间】:2021-03-31 07:35:59
【问题描述】:

我使用烧瓶和 MySQL 编写了一个 CRUD Python API。源代码位于本地系统,MySQL数据库位于真实网络主机。

是否可以将本地python代码连接到真实网络主机上的MySQL?

这里是 config.py

from app import app
from flask_mysqldb import MySQL

mysql = MySQL()
app.config['MYSQL_HOST'] = 'http://test.com:5000'
app.config['MYSQL_USER'] = 'guest'
app.config['MYSQL_PASSWORD'] = '12345'
app.config['MYSQL_DB'] = 'school'
mysql.init_app(app)

main.py:

from flask import request, jsonify, redirect, url_for
from app import app
from config import MySQL


@app.route('/list')
def home():
try:
    cursor = mysql.connection.cursor()
    cursor.execute("SELECT * FROM student")
    row_headers = [x[0] for x in cursor.description]
    studentsRows = cursor.fetchall()
    json_data = []
    for result in studentsRows:
        json_data.append(dict(zip(row_headers, result)))
    response = jsonify(student_list=json_data, status=120)
    response.status_code = 200
    return response
 except Exception as e:
    print(e)

@app.errorhandler(404)
def not_found(error=None):
message = {
    'status': 404,
    'message': 'Record not found: ' + request.url,
}
response = jsonify(message)
response.status_code = 404
return response


if __name__ == '__main__':
app.run(host="0.0.0.0")

【问题讨论】:

  • 是什么阻止您将主机更改为真实的网络主机?
  • 代码位于本机但Mysql数据库位于真实主机。我想在本地调试和测试我的代码。可能吗?还是我必须将 Python 部署到真正的主机上?
  • 当然可以,只要您的生产数据库防火墙没有阻止您的 ip

标签: python mysql flask server pycharm


【解决方案1】:

绝对可以从不同位置连接到您的数据库。

这实际上是基于服务器的数据库系统的主要功能,就像 mysql 或例如 postgresql 一样。 将其与 sqlite 之类的东西进行比较,后者是一个简单的基于文件的数据库系统。

它有一个简单的要求 - 服务器必须可以从您当前的网络访问。

这意味着几件事:

  • 服务器的 IP 必须可从您的网络访问 - 它必须分配公共 Internet IP 或可通过 VPN 网络访问。错误设置示例:
    • 服务器在朋友家的计算机上运行,​​他没有公共 IP,他的 ISP 也不允许端口转发。
  • 本地防火墙(企业网络可以有严格的设置)或服务器的防火墙本身不得阻止从您的网络到服务器网络的连接。
  • 数据库has to be configured 监听这些外部连接。默认情况下,这些服务器中的大多数仅侦听本地网络/接口。
  • 应采取适当的安全措施。将数据库打开到整个互联网被认为是非常不安全的,因为它允许任何人摆弄它(密码蛮力,错误探索......)。您应该拥有强大的密码,并且至少有 IP 白名单。

请看mysql manual,还有一堆教程如何设置这个,简单的谷歌搜索应该可以工作。

编辑: 至于您的代码示例,请参阅有关如何连接到服务器的flask_mysql 文档,您可能对'MYSQL_HOST' 值最感兴趣,尽管所有其他值(用户、通行证、端口、dbname)必须匹配已在您的服务器上配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2015-10-02
    • 2011-06-19
    • 2017-05-28
    • 2014-07-27
    • 2014-11-12
    • 2019-05-13
    相关资源
    最近更新 更多