python数据库接口开发,并部署到服务器(uwsgi+nginx+flask)

1.python操作数据库

要想编写数据库接口,必然要先能够读取数据库,本文以python中常用的库pymysql为例。需要事先安装好pymysql。

# 连接数据库
db = pymysql.connect(host='127.0.0.1', user='root', password='root用户的密码', database='数据库名称')
# 获取游标对象
cursor = db.cursor()
# 查找数据
sql_select = 'select * from 查询的表名 '
# 执行sql
cursor.execute(sql_select)
results = cursor.fetchall()
# 关闭数据库
db.close()

数据库的查询结果就在results中,可自行print查看。

json_data = []
for i in results:
            result = {"a": i[0], "b": i[1], "c": i[2]}
            json_data.append(result)
jsondatar = json.dumps(json_data, ensure_ascii=False)

对results进行遍历,abcd是字段名称,然后将数据转化成json,jsondatar就是结果。

在本文中数据库默认为云服务器上的mysql数据库,所以需要将数据库连接信息修改,host是服务器主机ip。

2.flask接口开发

这里推荐用flask框架开发接口,因为flask非常轻量,代码结构简单,非常好学,熟悉其他web框架的基本看一下就懂了。下面上代码。

from flask import Flask
import pymysql
import json

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'hello world!'



if __name__ == '__main__':
    app.run()

需要事先安装flask,安装方法直接“pip install flask”,完成这些代码以后,在本地run一下,浏览器地址输入http://127.0.0.1:5000/

就可以看到hello world了。

同理,接口开发类似

from flask import Flask
import pymysql
import json

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'hello world!'

@app.route("/id=<int:id>")
def api(id):
    request_id = int(id)
     global real_json
    # 打开数据库,读取内容
    try:
        file = get_data()
        j1 = json.loads(file)
        # print(type(j1))
        # print(j1)
        real_json = "未找到该数据"
        for i in j1:
            # 索引ID
            id = i['id']
            if request_id == id:
                real_json = json.dumps(i, ensure_ascii=False)
    expect:
        print("连接数据库失败")
    body = real_json
    # response = "\n" + body + "\n"
    response =  body
    print("\nresponse data:", response)
    return response

if __name__ == '__main__':
    app.run()

第一节中的连接数据库操作可以封装成get_data函数,返回的json数据在api函数中被接收,同时api函数接收客户端发送的id,使用此id把该id对应的数据从json中取出,并再封装成json,作为响应体返回给客户端。同样先run程序,浏览器中输入“http://127.0.0.1:5000/id=1”访问,此时会返回数据库中id为1的数据。此时一个本地的flask服务端就搭建完成。

3.flask项目部署到云服务器

云服务器大部分均为linux系统,所以必须要具有一定的linux命令基础。

3.1配置搭建uwsgi服务器

首先必须的要求是,先确认服务器上的python环境,使用xshell6连接服务器,命令行键入python -V,看是否有效果,如无效果,请百度linux下的python安装及环境变量配置。

确认python环境后,先pip安装uwsgi,安装完成后,将本地编写的flask项目使用xftp6上传到服务器文件夹,cd到这个文件夹,新建一个uwsgi.ini文件。放上最简单的配置文件内容。

笔者2020/10/26日补充说明:关于上一步,生产环境中一般python使用虚拟环境而非全局环境,所以uwsgi安装使用pip命令则会报错,笔者使用的miniconda,解决方式是执行conda install -c conda-forge uwsgi命令安装,即可安装成功

[uwsgi]
http = 0.0.0.0:8080
wsgi-file = api.py
callable = app

第一行是uwsgi服务器的端口且允许所有ip访问,第二行是flask项目的文件名,第三行是uwsgi默认识别文件中的application函数,将其修改为flask的app函数。

完成uwsgi.ini文件配置后,在当前文件夹执行命令 “uwsgi uwsgi.ini”,这个执行命令的前提是:当前操作系统python是全局环境且uwsgi安装在全局环境中,否则会提示uwsgi命令未找到。(补充说明:如果是虚拟环境,只要在当前虚拟环境下运行即可

若这一切工作都完成后,没有出错的话,现在在本地浏览器中输入云服务器ip,端口为8080访问的话,就会出现hello world,如果没有出现,有可能是某些云服务器提供商需要申请开通8080端口,请自行替换成已开通的端口(比如默认的80)或者申请开通8080端口。

若最后能够成功访问,那么一个uwsgi服务器已经成功搭建。此时如果使用ctrl + c命令中止的话,会发现接口又无法访问了,那是因为进程中断了,需要我们使uwsgi能够持续运行,键入命令“uwsgi -d --ini uwsgi.ini”,然后刷新浏览器就会发现正常访问了。

3.2配合nginx

一般情况下,如果只使用uwsgi能够实现的访问的话,也基本算完成一个接口了,但是因为云服务器往往不止运行一个程序,所以就需要一个管理者,这个管理者就是nginx,所有访问云服务器的请求都会被nginx所接收,然后调配资源将请求分发给云服务器上的执行程序,再接收云服务器端返回的请求,转发给客户端。说白了,类似于邮政快递系统,所有快递进来都要先经过当地的快递集散点,然后由快递集中点调配快递员运往个人,寄快递的时候也一样。而快递集中点不会总让某一个快递员送快递,所以就会给每个快递员大致均等的任务量,这点在服务器上被称为负载均衡。

首先安装nginx,安装方法自行百度,然后找到nginx安装位置

ps -ef | grep nginx 

 会有这样一条显示出来

root      2694     1  0 May11 ?        00:00:00 nginx: master process /www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf

/www/server/nginx/conf/nginx.conf便是nginx的配置文件的位置,然后修改该配置文件,用vi编辑器也行或者xftp6中右键该文件用记事本编辑该文件。推荐用vi编辑器,因为显示比较友好,尽管vi操作起来有点麻烦。打开查看该文件直接看最后一行,看有没有include xxxxxxxxx的语句,如果有的话请cd到include后面的的文件路径,然后在那个文件夹下创建自定义的xxx.conf名文件。同样编辑新建的这个文件。

server {
        listen       8080;
        # 这里是监听8080端口,请自行替换为当前服务器已经开放的端口
        server_name 替换成服务器的ip;
          
        location / {
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8081;
            #8081需要与uwsgi.ini文件中的端口对应,自行修改
            uwsgi_param UWSGI_SCRIPT wsgi;
            uwsgi_param UWSGI_CHDIR /web;
            #项目文件的文件夹
            index  index.html index.htm;
            client_max_body_size 35m;
        }
}

完成以上注释中的替换后,保存文件,命令行启动或重启nginx。

启动命令:nginx

重启命令:nginx –s reload

启动后在本地浏览器输入云服务器ip+自己配置监听的端口号,会发现会报502页面,这基本可以确认nginx配置正确了,更严谨的方法就是查看端口是否被nginx占用。

lsof -i :8080

如果这些全都没报错,那么就可以进入下个阶段了。

3.3 nginx+uwsgi

nginx正常启动后,8080端口就会被占用,上节中我们uwsgi配置的就是8080端口,所以需要修改为其他空闲端口,这里设置8081端口,一步到位就是修改uwsgi.ini文件,第一行修改为

socket = 0.0.0.0:8081

同时需要检查上节编写的文件名xxxx.conf的nginx配置文件,这一行

uwsgi_pass  127.0.0.1:8081;

端口必须也是8081,完成修改后保存。

命令行键入“uwsgi -d --ini uwsgi.ini”使服务启动,然后再访问nginx监听的8080端口,测试成功即完成接口开发。

4.最后

笔者在这之前对这个部署是一窍不通,也不会写接口,纯粹0起步,所以在当我琢磨透之后就写此篇博客,希望能帮到跟我有同样 困扰的你,最后这个一套流程下来bug是真的不少,笔者单单python环境都给我头疼的要命,linux命令也不熟悉,遇到了太多的bug跟错误,我的解决办法是先把错误用有道词典给翻译了,毕竟笔者英文水平也不高,这一下可以基本解决50%的问题。剩下的百度错误,看看有没有好的解决方案,记得在尝试这些解决方案的时候先进行备份,不然会很乱。实在解决不了了,请在本文下面评论,我会尽力为你解答,也希望我们能够共同进步。

  • 11
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Flask是一个基于Python的轻量级Web框架,它提供了简单易用的工具来构建Web应用程序。Flask具有灵活的设计,可以根据需求进行扩展和定制。它支持RESTful风格的API开发,并且具有良好的可扩展性,适用于开发小型到中型的Web应用。 uWSGI是一个Web服务器和应用服务器,它可以将Web应用程序从框架中分离出来,并通过WSGI协议与框架进行通信。它支持高并发和负载均衡,并且具有内置的缓存机制和性能监控。uWSGIFlask配合使用可以提高Web应用程序的性能和稳定性。 Nginx是一个高性能的开源HTTP服务器和反向代理服务器。它可以处理大量并发连接,并能有效地分发请求到后端服务器Nginx的反向代理功能可以将请求转发给uWSGI服务器,然后由uWSGI服务器处理Flask应用程序的逻辑。 使用FlaskuWSGINginx的组合可以实现一个高性能的Web应用程序架构。首先,Flask用于开发Web应用程序的逻辑和路由。然后,uWSGI作为应用程序服务器,将Flask应用程序加载到内存中,并以WSGI协议与Nginx进行通信。最后,Nginx作为前端服务器,通过负载均衡和反向代理将请求分发到uWSGI服务器。 这种架构可以提供高并发、可扩展和稳定的Web应用程序。Flask提供了优雅的开发方式,uWSGI处理应用程序的逻辑和性能优化,而Nginx作为前端服务器提供高性能的负载均衡和反向代理。整个架构可以根据需求进行灵活的配置和扩展,以满足不同规模的Web应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值