G01-python操作数据库SQLAlchemy(代码学习)

learn_sql.py代码【创建数据库 表】:

#python操作数据库

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import pymysql


app=Flask(__name__)#实例化一个app

#数据库的配置变量
HOSTNAME='127.0.0.1'
PORT='3306'
DATABASE='zl_flask'
USERNAME='root'
PASSWORD='abc123'
DB_URI='mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
app.config['SQLALCHEMY_DATABASE_URI']=DB_URI

#app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:abc123@127.0.0.1:3306/zl_flask?charset=utf8'
# app.config['SQLALCHEMY_DATABASE_URI']='sqlite://'+r'F:/sql_zmj/first.db' #'sqlite://'+'数据库的位置'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True#是否跟踪修改
app.config['SECRET_KEY']='djsakofhsjdk'#配置密钥  【随便输入,不要给别人看】

db=SQLAlchemy(app)#实例化一个数据库

#创建表
#学生表
class Student(db.Model):
    __tablename__='student'
    id=db.Column(db.Integer,primary_key=True)#类型,主键
    name=db.Column(db.String(64),nullable=False)#字符串类型,是否可以为空
    gender=db.Column(db.Enum("男","女"),nullable=False)#枚举类型
    phone=db.Column(db.String(11))#手机号可以为空

#课程表
class Course(db.Model):
    __tablename__='course'
    id=db.Column(db.Integer,primary_key=True)#主键
    name=db.Column(db.String(64),nullable=False)
    teacher_id=db.Column(db.Integer,db.ForeignKey('teacher_id'))
    grades=db.relationship('Grade',backref='student')#成绩关系关联


#教师表
class Teacher(db.Model):
    __tablename__='teacher'
    id=db.Column(db.Integer,primary_key=True)#主键
    name=db.Column(db.String(64),nullable=False)
    gender=db.Column(db.Enum("男","女"),nullable=False)
    phone=db.Column(db.String(11))


#成绩表
class Grade(db.Model):
    __tablename__='grade'
    id=db.Column(db.Integer,primary_key=True)#主键
    grade=db.Column(db.String(3),nullable=False)
    student_id=db.Column(db.Integer,db.ForeignKey('student.id'))#外键



if __name__ == '__main__':
    db.create_all()
    #db.drop_all()#回调数据库

operate_new_sql.py代码【对表的增删改查】:

from learn_sql import db,Student,Grade

#单表的增
s1=Student(name='张三',gender='男',phone='11111111111')
s2=Student(name='张蛋',gender='男')
s3=Student(name='李四',gender='男')
s4=Student(name='王五',gender='男',phone='44444444444')
db.session.add(s1)#添加语句
db.session.add_all([s2,s3,s4])#添加多行
db.session.commit()#提交

grade1=Grade(grade=98,student_id=1)
grade2=Grade(grade=92,student_id=2)
grade3=Grade(grade=95,student_id=3)
db.session.add([grade1,grade2,grade3])
db.session.commit()


# 查
# 方式一:get()  ==》查单一个
stu=Student.query.get(1)#只能查询一个,传入主键
print(stu.name,stu.phone)
#方式二:all() ==》查全部
stu=Student.query.all()
for i in stu:
    print(i.name,i.gender,i.phone)
#方式三:filter()  ==》条件查询
stu=Student.query.filter(Student.id==2)
print(stu)
#方式四:filter_by() 类似于SQL查询 | first()第一个  all()所有,如果是all(),不能直接print,必须for迭代遍历
stu=Student.query.filter_by(name='张三').first()#【注意】一个等号
print(stu)
#上面这些都可以结合使用


# 改
#方法一:update({key:value})
num=Student.query.filter(Student.id==1).update({'name':'张一'})
db.session.commit()#增 删 改 都需要提交

num1=Student.query.filter(Student.gender=='男').update({'gender':'女'})#返回的是动了多少条数据
db.session.commit()

#方法二:赋值 ==》添加 ==》提交
stu=Student.query.filter(Student.gender=='女').all()
for i in stu:
    i.gender='男'
    db.session.add(i)
db.session.commit()


# 删
stu=Student.query.filter(Student.gender=='男').delete()#返回动了多少数据
db.session.commit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值