欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

python编写一个接口,链接mysql数据库查询数据

时间:2023-08-15

1、首先,使用python查询mysql数据库代码如下:

import MySQLdbdef getcontent(): db = MySQLdb.connect('localhost', 'root', '1qaz!QAZ', 'zlnewschema', charset='utf8') cursor = db.cursor() sql = 'select * from user;' cursor.execute(sql) usercontent = cursor.fetchall() print(usercontent) for row in usercontent: fname = row[0] femail = row[1] fpw = row[2] ftime = row[3] print('name=%s,email=%s,password=%s,createtime=%s' %(fname, femail, fpw,ftime))    db.close()if __name__ == '__main__': getcontent()

改为接口,用的Flask框架(可以对比看看需要改哪些地方):

Post请求(get直接换成get就行了):

import MySQLdbimport jsonimport osos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'from flask import Flask,request# from flask_cors import *app = Flask(__name__)@app.route('/index1', methods=['POST'])def getcontent(): db = MySQLdb.connect('localhost', 'root', '1qaz!QAZ', 'zlnewschema', charset='utf8') cursor = db.cursor() sql = 'select * from user;' cursor.execute(sql) usercontent = cursor.fetchall() print(usercontent) userjson = [] for row in usercontent: fname = row[0] femail = row[1] fpw = row[2] ftime = row[3] # print('name=%s,email=%s,password=%s,createtime=%s' %(fname, femail, fpw,ftime)) user = 'name=%s,email=%s,password=%s,createtime=%s' %(fname, femail, fpw,ftime) userjson.append(user) db.close() return json.dumps(userjson, ensure_ascii=False, indent=4)if __name__ == '__main__': # getcontent() app.run(host='0.0.0.0', port=5590)

上面实现了一个简单的接口

但是上面返回的是所有的数据,怎么根据条件去筛选数据呢?比如我就想要 name = 张亮 的那条数据,操作如下。

具体代码如下:

import MySQLdbimport jsonimport osos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'from flask import Flask,request# from flask_cors import *app = Flask(__name__)@app.route('/index1', methods=['POST'])def zlindex(): inputData = request.json.get('username') userdata = getcontent(inputData) return userdatadef getcontent(inputData): db = MySQLdb.connect('localhost', 'root', '1qaz!QAZ', 'zlnewschema', charset='utf8') cursor = db.cursor() sql = "select * from user where username = '%s';" %(inputData) cursor.execute(sql) usercontent = cursor.fetchall() print(usercontent) userjson = [] for row in usercontent: fname = row[0] femail = row[1] fpw = row[2] ftime = row[3] # print('name=%s,email=%s,password=%s,createtime=%s' %(fname, femail, fpw,ftime)) user = 'name=%s,email=%s,password=%s,createtime=%s' %(fname, femail, fpw,ftime) userjson.append(user) db.close() return json.dumps(userjson, ensure_ascii=False, indent=4)if __name__ == '__main__': # getcontent() app.run(host='0.0.0.0', port=5590)

postman搜索如下:

这时候,发现返回的只是一个字符串,然而想要一个标准化的json格式的话,就需要修改一下for循环的赋值方法:

import MySQLdbimport jsonimport osos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'from flask import Flask,request# from flask_cors import *app = Flask(__name__)@app.route('/index1', methods=['POST'])# def zlindex():# inputData = request.json.get('username')# userdata = getcontent(inputData)# return userdatadef getcontent(): db = MySQLdb.connect('localhost', 'root', '1qaz!QAZ', 'zlnewschema', charset='utf8') cursor = db.cursor() sql = "select * from user" # sql = "select * from user where username = '%s';" %(inputData) cursor.execute(sql) usercontent = cursor.fetchall() print(usercontent) userjson = [] for row in usercontent: # fname = row[0] # femail = row[1] # fpw = row[2] # ftime = row[3] # print('name=%s,email=%s,password=%s,createtime=%s' %(fname, femail, fpw,ftime)) user = {'name': row[0], 'email': row[1], 'password': row[2], 'createtime': row[3].strftime("%Y-%m-%d %H:%M:%S")} # print(user) userjson.append(user) # print(userjson) db.close() return json.dumps(userjson, ensure_ascii=False, indent=4) # 返回一个字典格式if __name__ == '__main__': # getcontent() app.run(host='0.0.0.0', port=5590)

过程中发现,接口请求会报服务端500,服务端报错为:TypeError: Object of type 'datetime' is not JSON serializable 

最后找到的原因,是提取的值里有日期格式,作为一个字符串str输出无问题,但是json格式不能识别,只要赋值时转换下格式就行:'createtime': row[3].strftime("%Y-%m-%d %H:%M:%S")}

查询结果如下:

 

Postman使用方法详解:https://blog.csdn.net/fxbin123/article/details/80428216

Flask中文文档:http://docs.jinkan.org/docs/flask/

相关参考链接:https://www.cnblogs.com/testcoffee/p/6295970.html

                            https://www.jianshu.com/p/657c9be12e00

                            https://www.cnblogs.com/crss/p/8529002.html
————————————————
版权声明:本文为CSDN博主「Steven灬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40547993/article/details/89632691

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。