如何将python连接到MySQL服务器

2024-06-20 14:55:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我用flask和MySQL编写了一个crudpythonapi。源代码位于本地系统中,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")

Tags: fromimportconfigjsonappflaskfordata
1条回答
网友
1楼 · 发布于 2024-06-20 14:55:26

完全可以从不同的位置连接到数据库

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

对它只有一个简单的要求——服务器必须可以从当前网络访问

这意味着几件事:

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

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

编辑: 至于您的代码示例,请参阅关于如何连接到服务器的flask_mysql文档,您可能最感兴趣的是'MYSQL_HOST'值,尽管所有其他值(user、pass、port、dbname)必须与服务器上配置的值相匹配

相关问题 更多 >