冷库网站建设网站备案管理办法

当前位置: 首页 > news >正文

冷库网站建设,网站备案管理办法,餐饮管理东莞网站建设,WordPress头像ssl课程地址#xff1a;Python Web 框架 Flask 快速入门 文章目录数据库1、数据库的安装与配置2、数据库的简单使用——增删改1. 定义数据模型2. 增删改3、 关系引用——表的关联4、查询——通过SQLAlchemy扩展5、其他1. 数据模型的实现#xff08;疑惑#xff09;6、Bug记录1.… 课程地址Python Web 框架 Flask 快速入门 文章目录数据库1、数据库的安装与配置2、数据库的简单使用——增删改1. 定义数据模型2. 增删改3、 关系引用——表的关联4、查询——通过SQLAlchemy扩展5、其他1. 数据模型的实现疑惑6、Bug记录1. 1045,Access denied for user rootlocalhost (using password: YES)2. RuntimeError: Working outside of application context数据库 1、数据库的安装与配置 这节用到flask的两个扩展使用pip安装扩展就行 pip install flask-sqlalchemy pip install flask-mysqldb然而扩展只是基于数据库的一个抽象工具就是说它只能让你的数据库更好用但它本身并不是数据库。在使用这两个扩展之前你还需要安装一个MySQL数据库。 参考MySQL数据库安装教程详细 按教程中的压缩包方法反正我安装成功了如果遇到问题可以翻翻评论区试试。 完成安装和配置后数据库本地服务的启动流程

1.登录数据库打开cmd输入下面命令。成功后会显示一段Welcome的话

C:\Users\ThinkPadmysql -u用户名 -p 密码

2. 创建数据库如果创建过可跳过

mysql create database flask_sql_demo charsetutf8;

3. 启动已创建的数据库

mysql use flask_sql_demo;MySQL较常见的一些命令

1. 显示所有表单名

mysql show tables;

2. 查看一个表单的字段结构数据字典

mysql desc 表单名;

3. 查看一个表单的内容

mysql select * from 表单名;

4. 关闭数据库 – 显示Bye

mysql quit

5. 显示所有数据库

mysql show databases;

6. 删除数据表

mysql drop table 数据表名;

7. 删除数据库

mysql drop database 数据库名;2、数据库的简单使用——增删改

  1. 定义数据模型 增删改的操作对象是数据表所谓“定义数据模型”应该就是定义表的结构。 运行代码前并不需要在终端登录数据库脚本中本身就会登录。在终端登录数据库可以方便查看数据库的状态。 from flask import Flask from flask_sqlalchemy import SQLAlchemyapp Flask(name)# 配置数据库的地址url结构为mysql://用户名:密码IP地址/数据库名 app.config[SQLALCHEMY_DATABASE_URI] mysql://root:写你的密码127.0.0.1/flask_sql_demo2# 数据库实例 db SQLAlchemy(app) 两张表 角色管理员普通用户 用户角色id

    数据库的模型需要继承db.Model

    class Role(db.Model):# 定义表名tablename roles# 定义字段 – db.Column表示是一个字段id db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(16), uniqueTrue)class User(db.Model):tablename usersid db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(16), uniqueTrue)email db.Column(db.String(32),uniqueTrue)password db.Column(db.String(32))# db.ForeignKey(roles.id)表示是外键表名.idrole_id db.Column(db.Integer, db.ForeignKey(roles.id))# – main – ctx app.app_context() ctx.push() db.drop_all() # 删除旧表 db.create_all() # 创建新表 ctx.pop() 然后可以在终端使用mysql命令查看创建的表单

    mysql show tables;

    Tables_in_flask_sql_demo2
    roles
    users

    2 rows in set (0.00 sec)2. 增删改 Flask-SQLAlchemy的数据是有会话(Session)管理的在增、删或修改操作后都需要有一个提交步骤然后变更才会在数据库中生效。 1、增加数据 ro1 Role(nameadmin) db.session.add(ro1) db.session.commit()也可以批量添加提交数据 ro1 Role(nameadmin) ro2 Role(nameuser) db.session.add_all([ro1, ro2]) db.session.commit()2、修改数据 ro1.name other db.session.commit()3、删除数据 db.session.delete(ro1) db.session.commit()3、 关系引用——表的关联 我们之前定义的表users中有一个外键role_id是关联到表roles的。如果要从表users中要得到一个用户的角色的名字就只能先得到角色的id然后拿着这个id再到roles表中去找角色的名字就是说需要经过两次查询。 “关系引用”的 作用上述过程我只需要一次查询就可以得到用户的角色名。 条件需要是“一对多”的关系例如很多用户有相同的角色名但一个用户只能有一个角色名这里角色名就是“一”用户就是“多”。 创建在作为“一”的一方写关联。
    创建roles表和users表之间的关联我只需要修改类Role的定义就可以了。 class Role(db.Model):tablename rolesid db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(16), uniqueTrue)# 在一的一方写关联# Role表增加了一个users属性# backrefrole表示role也是User要用的属性(回关)users db.relationship(User, backrefrole)关联的属性不会出现在数据库的表中我们可以通过类名.属性名的方式来访问一个表的属性例如 print(ro1.users)输出的效果是这样子下面的输出仅用于展示格式它仅显示了类型和id [User 1, User 2]如果我希望显示用户的具体信息则需要在类的定义中加入ref方法例如在类User中加入 class User(db.Model):tablename usersid db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(16), uniqueTrue)email db.Column(db.String(32),uniqueTrue)password db.Column(db.String(32))role_id db.Column(db.Integer, db.ForeignKey(roles.id))# 类的实例返回字符串def repr(self) - str:return User: %s %s %s %s %s % (self.id, self.name, self.email, self.password, self.role_id)则表的属性显示效果将是 [User: 1 wang wang123.com None 1, User: 2 zhang zhang123.com None 1]4、查询——通过SQLAlchemy扩展 过滤器和执行器过滤器仅对数据进行筛选返回结果还需使用执行器。 查询users表中的所有对象 User.query.all()查询users表中id为4的对象

    1. 旧的已弃用

    User.query.get(4)

    2. filter_by – 属性值

    User.query.filter_by(id4).first()

    3. filter – 类.属性值; 更加灵活支持比较运算符

    User.query.filter(User.id4).first()5、其他

  2. 数据模型的实现疑惑 感觉有些奇怪在定义一个数据模型类时我仅仅需要在类中定义一些变量如tablenameidname class Role(db.Model):tablename rolesid db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(16), uniqueTrue)后面创建数据时就可以使用这些变量名作为关键字参数传参 ro1 Role(nameadmin)我不知道父类db.Model做了什么可以达到这样的效果可能我python还是学得太浅了叭。 6、Bug记录

  3. 1045,Access denied for user ‘root’‘localhost’ (using password: YES) 当时我在cmd可以登录数据库可当我运行python脚本时就报出这个错误查了许多文章都没有解决。后来有次在终端输错了密码发现也是报这个错误于是发现是配置数据库地址的问题 root:mysql中的mysql是密码我还以为是固定的语法就照写了。

    错误写法

    app.config[SQLALCHEMY_DATABASE_URI] mysql://root:mysql127.0.0.1/flask_sql_demo2

    修改

    app.config[SQLALCHEMY_DATABASE_URI] mysql://root:我的密码127.0.0.1/flask_sql_demo22. RuntimeError: Working outside of application context 发现脚本中对数据库的操作就会引发改问题一个较方便的处理方式是 ctx app.app_context() ctx.push() 数据库操作 ctx.pop()参考解决Flask中RE 参考文章中还有一种使用with的上下文管理也是可以哒。