Python__FLASK__MySQL基础
1.数据库的基本操作
创建数据库:使用“CREATE DATABASE 数据库名;”语句创建新的数据库
查看数据库:使用“SHOW DATABASES;”语句查看所有数据库
选择数据库:使用“USE 数据库名;”语句选择要进行操作的数据库
删除数据库:使用“DROP DATABASES 数据库名;”语句删除数据库
2.数据表的基本操作
创建表:使用“CREATE TABLE 表明(列名 数据类型[约束],...);”语句创建表
查看表:使用“SHOW TABLES;”语句查看当前数据库中的所有表。
查看表结构:使用“DESCRIBE 表名;”或“SHOW COLUMNS FROM 表名;”语句查看表结构
删除表:使用“DROP TABLE 表名;”语句删除表
3.数据的基础操作
插入数据:使用“INSERT INTO 表名(列名1,列明2,...)VALUES(值1,值2,...);”语句插入数据。
查询数据:使用“SELECT 列名1,列名2,...FROM 表名 [WHERE 条件];”语句查询数据。可以使用“*”代替列名表示查询所有列。
更新数据:使用“UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,...[WHERE 条件];”数据更新数据
删除数据:使用“DELETE FROM 表名 [WHERE 条件];”语句删除数据。如果不加WHERE条件,将删除表中的所有数据。
4. FLASK配置环境
数据库创建 create database 数据库名 default charset utf8;
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='musql+pymysql://root:Zwh119811@127.0.0.1/数据库名' #mysql+pymsql://root:密码@路由地址/数据库名
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False 9
db=SQLAlchemy(app)
5.创建模型及flask数据表
class Role(db.Model):
'''角色表'''
__tablename__='role'
id=db.Column(db.Integer,primary_key=True) #数字即int类型
name=db.Column(db.String(32),unique=True)
class User(db.Model):
'''用户表'''
__tablename__='user'
id=db.Column(db.Integer,primary_key=True) #默认自增长
name = db.Column(db.String(128), unique=True)
password=db.Column(db.String(128))
#表关系 外键ForeignKey 用来关联到另外一张表
role_id=db.Column(db.Integer,db.ForeignKey('role.id'))
if __name__ =='__main__':
with app.app_context():
#清除所有表
db.drop_all()
#创建所有表
db.drop_all()
#创建对象,插入数据
role1=Role(name='admin')
# session记录到对象任务中
db.session.add(role1)
#提交任务
db.session.commit()
role2=Role(name='admin2')
db.session.add(role2)
db.session.commit()
use1=User(name='里看',password='321',role_id=role1.id) #关联到第一个角色
use2=User(name='luxun',password='321',role_id=role2.id) #关联到第二个角色
db.session.add_all([use1,use2]
db.session.commit()
#class Role(db.Mode1):定义了一个名为Role的类,他继承db.Model。db.Model 是SQLAlchemy 提供的一个基类,用于定义数据库模型
#__tablename__ = 'role':这是一个类属性,用于这个模型类在数据库中对应的表名。表名被设置为'role'。
#id = db.Column(db.Integer, primary_key=True): 这行代码定义了一个名为 id 的列,其数据类型为整数(db.Integer),并且这个列被指定为主键(primary_key=True)。主键是表中每条记录的唯一标识符。
#name = db.Column(db.String(32), unique=True): 这行代码定义了一个名为 name 的列,其数据类型为长度不超过32个字符的字符串(db.String(32))。unique=True 参数表示这个列的值在表中必须是唯一的,即不允许有两条记录具有相同的 name 值。
#role_id = db.Column(db.Integer, db.ForeignKey('role.id')): 定义了一个名为 role_id 的列,其数据类型为整数,并且这个列被设置为外键,引用 role 表中的 id 列。这表示每个用户都与一个角色相关联,通过 role_id 来建立这种关系。同样,这里更正了原代码中的 db.Interger 为 db.Integer。
6.增删改查
class User(db.Model): #映射进入数据库内部
__tablename__ = "user_1" #表名
id = db.Column(db.Integer, primary_key=True, autoincrement=True) #设置字段,且为主键,自主增长
#string在数据库中为varchar
username = db.Column(db.String(100), nullable=False) #设置用户名字段,为字符串类型,可设置长度,设置不可为空
password = db.Column(db.String(100), nullable=False) #设置密码字段,参数同上
@app.route('/user/add') #增添数据
def user_add():
# 创建ORM对象,设计一条数据,包含数据库内的字段
user1 = User(username="admin", password="123")
user2 = User(username="admin", password="12345")
user3 = User(username="张三", password="abc")
#使用add_all(),方法一次性添加多个对象 但首先需要将它们放入一个列表中
# 如果只有一个,那就db.session.add(user1)
users_to_add = [user1, user2, user3]
db.session.add_all(users_to_add) #将ORM对象添加到db.session中
#将db.session中的改变同步到数据库中,每一步对数据库进行操作都要有这个。
db.session.commit()
return "用户创建成功"
@app.route('/user/query') #查找数据
def query():
# 1.get查找,根据主键查找
#user = User.query.get(1) 查找到主键值为1的User对象(就是一行的数据
#print(f"{user.id}:{user.username}:{user.password}")
#return "数据查找成功"
# 2.filter.by查找
users = User.query.filter_by(username="admin")
#通过用户名来查找,查找所有为admin的用户,但不支持模糊搜索
for user in users:
print(user.username,user.password) # 可以调用user内的全部字段
return "数据查找成功"
# User.query.all() 获取表中的全部的User数据,返回数据为列表类型
# .exists() 判断数据是否存在
@app.route('/user/update')
def update():
#查找得到其中的数据
user = User.query.filter_by(username="张三").first()
# 不加first返回的是一个对象而不是一个实例
# 但所有删改都智能对某一个特定实例进行,所以必须要将实例从对象中取出
user.password = "aaaaa" # 更改user的数据
db.session.commit() #同步到数据库
return "数据修改成功!"
@app.route('/user/delete')
def delete():
# 查找到对应的数据
user = User.query.filter_by(username="张三").first()
# db.session中删除对应数据
db.session.delete(user)
# 同步到数据库
db.session.commit()
return "数据删除成功!"

浙公网安备 33010602011771号