当前位置:Gxlcms > 数据库问题 > 基于python-flask的数据库可视化系统(增删改查)

基于python-flask的数据库可视化系统(增删改查)

时间:2021-07-01 10:21:17 帮助过:28人阅读

基于python-flask的数据库可视化系统(增删改查)

前言

? 前文介绍了登录页面的开发,现在更进一步,介绍一下网页上数据库系统增删改查的实现。核心技术主要是ajax/flask/sqlalchemy。其中ajax负责在前端和后端之间传递数据,flask负责提供路由,sqlalchemy负责操作数据库

? 本次构建的是一个仓库系统,主键为自增id字段,其他字段有代表产品名称Goods_name,代表销量Goods_sales_volume,代表产量Goods_inventory。下面剖析一下核心代码,主要由utils.pyapp.pymain.html构成。

核心代码

utils.py

? utils.py模块主要负责提供操作数据库的函数,包含了增删改查功能,调用方式是sqlalchemy。sqlalchemy是一种ORM形式的数据库调用模块,其将表当作类去使用,不用输入原生的sql语句。

  1. <code class="language-python">‘‘‘
  2. Description: sqlalchemy
  3. Author: LJW
  4. Date: 2021-03-19 00:19:27
  5. LastEditTime: 2021-03-19 20:39:56
  6. LastEditors: LJW
  7. ‘‘‘
  8. from sqlalchemy import create_engine #创建引擎
  9. from sqlalchemy.ext.declarative import declarative_base
  10. from sqlalchemy.orm import sessionmaker
  11. from sqlalchemy import Column, INTEGER, String
  12. HOST_NAME = ‘localhost‘ # 数据库所在服务器ip,因为我是本地数据库所以这里是127.0.0.1
  13. HOST_PORT = ‘3306‘ # 数据库端口
  14. DATABASE_NAME = ‘flasktest‘ # 数据库名
  15. USER_NAME = ‘root‘ # 链接数据的用户名
  16. PWD = ‘root‘ # 链接数据库的密码
  17. DB_URI = ‘mysql+pymysql://{0}:{1}@{2}:{3}/{4}?charset=utf8‘.format(USER_NAME,PWD,HOST_NAME,HOST_PORT,DATABASE_NAME)
  18. engine = create_engine(DB_URI)
  19. Base = declarative_base(engine)
  20. class UserModule(Base):
  21. """
  22. 创建一个用户的数据模型
  23. """
  24. __tablename__ = ‘flasktest‘
  25. id = Column(INTEGER, primary_key=True, autoincrement=True, comment=‘用户id‘)
  26. Goods_name = Column(String(30), nullable=False, unique=True, comment=‘商品名‘)
  27. Goods_sales_volume = Column(INTEGER, nullable=False, comment=‘产量‘)
  28. Goods_inventory = Column(INTEGER, nullable=False, comment=‘销量‘)
  29. def __repr__(self):
  30. return ‘User(id={id}, Goods_name={Goods_name}, Goods_sales_volume={Goods_sales_volume}, Goods_inventory={Goods_inventory})‘.format(
  31. id=self.id, Goods_name=self.Goods_name, Goods_sales_volume=self.Goods_sales_volume, Goods_inventory=self.Goods_inventory)
  32. def get_db():
  33. ‘‘‘
  34. @desc:查询所有数据记录
  35. ‘‘‘
  36. names = []
  37. sales = []
  38. invents = []
  39. Session = sessionmaker(bind=engine)
  40. session = Session()
  41. nameQuery = session.query(UserModule).all()
  42. for rec in nameQuery:
  43. names.append(rec.Goods_name)
  44. sales.append(rec.Goods_sales_volume)
  45. invents.append(rec.Goods_inventory)
  46. return names, sales, invents
  47. def insert_db(Goods_name, Goods_sales_volume, Goods_inventory):
  48. ‘‘‘
  49. @desc: 增加一行数据
  50. ‘‘‘
  51. Session = sessionmaker(bind=engine)
  52. session = Session()
  53. info = UserModule(Goods_name=Goods_name, Goods_sales_volume=Goods_sales_volume, Goods_inventory=Goods_inventory)
  54. session.add(info) # 添加单条数据
  55. session.commit()
  56. def del_data(del_name):
  57. ‘‘‘
  58. @dec: 删除所有对应的Goods_name
  59. ‘‘‘
  60. Session = sessionmaker(bind=engine)
  61. session = Session()
  62. session.query(UserModule).filter_by(Goods_name=del_name).delete()
  63. session.commit()
  64. def modify_data(name, Goods_inventory, Goods_sales_volume):
  65. ‘‘‘
  66. @dec: 修改对应的Goods_name的属性数据
  67. ‘‘‘
  68. Session = sessionmaker(bind=engine)
  69. session = Session()
  70. modifyInfo = session.query(UserModule).filter_by(Goods_name=name).first()
  71. modifyInfo.Goods_inventory = Goods_inventory
  72. modifyInfo.Goods_sales_volume = Goods_sales_volume
  73. session.commit() # 提交
  74. </code>
app.py

路由模块,负责提供路由/视图函数,是连接前端和数据库的桥梁。这里我们选用的都是POST请求

  1. json.loads(request.get_data(as_text=True))读取前端传递的json数据
  2. @app.route(‘/searchdb‘, methods=[‘POST‘])提供路由地址,即请求地址
  3. jsonify(res)返回json数据给前端
  1. <code class="language-python">@app.route(‘/searchdb‘, methods=[‘POST‘])
  2. def searchdb():
  3. if request.method == ‘POST‘:
  4. data = json.loads(request.get_data(as_text=True))
  5. print(data)
  6. if data[‘did‘] == ‘search‘:
  7. name, sale, invent = utils.get_db()
  8. #如果查询出来的是database类的结构,需要转string,再转json
  9. res = {
  10. ‘name‘: name,
  11. ‘sales‘:sale,
  12. ‘invent‘:invent
  13. }
  14. print(res)
  15. return jsonify(res)
  16. @app.route(‘/deletedb‘, methods=[‘POST‘])
  17. def deldb():
  18. if request.method == ‘POST‘:
  19. data = json.loads(request.get_data(as_text=True))
  20. del_name = data[‘delname‘]
  21. utils.del_data(del_name)
  22. res = {
  23. ‘code‘:‘200‘
  24. }
  25. return jsonify(res)
  26. @app.route(‘/insertdb‘, methods=[‘POST‘])
  27. def insertdb():
  28. if request.method == ‘POST‘:
  29. data = json.loads(request.get_data(as_text=True))
  30. utils.insert_db(data[‘name‘], data[‘sales‘], data[‘inventory‘])
  31. res = {
  32. ‘code‘:‘200‘
  33. }
  34. return jsonify(res)
  35. @app.route(‘/modifydb‘, methods=[‘POST‘])
  36. def modifydb():
  37. if request.method == ‘POST‘:
  38. data = json.loads(request.get_data(as_text=True))
  39. utils.modify_data(data[‘name‘], data[‘inventory‘], data[‘sales‘])
  40. res = {
  41. ‘code‘:‘200‘
  42. }
  43. return jsonify(res)
  44. </code>
main.html

除了需要新增input、button按钮外,还需要新增ajax请求的js代码,

这里给出修改部分的代码示例。

  1. $("#modified").click(function() {})是jq代码,用于触发button的click事件。
  2. $("textarea").val(newcontent);可用于修改textarea文本框内容
  3. JSON.stringify()封装前端要发送的数据
  1. <code class="language-javascript"> <script type="text/javascript">
  2. $("#modified").click(function(){
  3. modifyData()
  4. })
  5. function modifyData() {
  6. var names = $(‘#add1‘).val();
  7. var sales = $(‘#add2‘).val();
  8. var invents = $(‘#add3‘).val();
  9. // delete behavior
  10. $.ajax({
  11. cache: false,
  12. type: "POST",
  13. url: "/modifydb",
  14. //JSON封装发送的数据
  15. data: JSON.stringify({
  16. "name": names,
  17. "sales": sales,
  18. "inventory": invents
  19. }),
  20. async: false,
  21. dataType : "json", // 服务器返回的数据形式, 如果是render_template就是html / 一般是json
  22. success: function(res) {
  23. alert("修改成功!" + res[‘code‘]);
  24. // alert(res[‘code‘]);
  25. },
  26. error: function(err, type) {
  27. alert("密码输错 或 有BUG导致请求发送失败咯!");
  28. console.log("ajax错误类型:" + type); //查看错误类型
  29. console.log(err);
  30. }
  31. });
  32. }
  33. </script>
  34. </code>

展示

技术图片

后记

  1. web开发的核心是增删改查,有了这些可以开发简单的小网页。但想要进阶还需要了解并发、多线程等知识。
  2. jquery、js应尽快掌握,写出质量高的代码
  3. falsk开发里有时候还会用到jinja模板,目前暂时没用到,需要关注。

基于python-flask的数据库可视化系统(增删改查)

标签:增删改   提交   bug   base   inventory   prim   一个   后端   def   

人气教程排行