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()