flask数据库基础demo

SQLAlchemy一对一的创建及一些操作

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
# 获取绝对路径
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
# wk/fk.sqlite
# 1.配置数据库连接
class Config(object):
    # 连接数据库
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(BASE_DIR, 'fk.sqlite')
    # 设置sqlalchemy 自动更新
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
# 2. 读取Config 对象
app.config,from_object(Config)
# 3. 创建 对象
db = SQLAlchemy(app)
# 创建模型类
class Student(db.Model):
	__tablename__='tb_student'
	id = db.Column(db.Integer, primary_key= True, autoincrement= True)
	name = db.Column(db.String(32), nullable= False, unique= True)
	age = db.Column(db.Integer, default = 18)
	
	def __repr__(self):
		return '<obj name:{}>'.format(self.name)

if __name__ == '__main__':
	# 方便测试,每次开启都会更新数据库
	db.drop_all() # 删除表格
	db.create_all() # 创建表格
	
	std1 = Student(name='zs', age=18)
	std2 = Student(name='ls', age=17)
	std3 = Student(name='zss', age=20)
	std4 = Student(name='lss', age=19)
	
	db.session.add_all([std1,std2,std3,std4])
	db.session.commit()
	
# 查询:
# all所有
reselt1 = Student.query.all()
# get具体某一对象必须唯一标识
reselt2 = Student.query.get()
reselt3 = Student.query.first()# 第一个对象
# filter_by() 过滤,可以写多个条件 
reselt4 = Student.query.filter_by(name='zs',age=17).all
# filter()过滤 类名.属性名==值
reselt5 = Student.query.filter(Student.name == 'zs').all()

from sqlalchemy import or_, not_

reselt6 = Student.query.filter(or_(Student.name == 'zs',Student.age == 19)).all()# 或
reselt7 = Student.query.filter(not_(Student.age == 20)).all()# 取反
reselt8 = Student.query.order_by(-Student.age).all()# 升序排序 '-'降序
reselt9 = Student.query.offset(1).all() # 偏移
reselt10 = Student.query.limit(2).all() # 限定
reselt11 = Student.query.filter(Student.name.like('%s%')).all()
# 原生sql
reselt = db.session.execute("select * from tb_student")
for ret in reselt:
	print(ret.id,ret.name,ret.age)

 # 默认开启事务,增删改操作,需提交
# 改1
student_obj = Student.query.get(1)
student_obj.age = 40
db.session.add(student_obj)
db.session.commit()
# 改2
Student.query.filter_by(id=1).update({'age':30})
db.session.commit()
# 删除
student_obj = Student.query.get(3)
db.session.delete(student_obj)
db.session.commit()

一对多及一些基础操作

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
# 获取绝对路径
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
# wk/fk.sqlite
# 1.配置数据库连接
class Config(object):
    # 连接数据库
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(BASE_DIR, 'fk.sqlite')
    # 设置sqlalchemy 自动更新
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
# 2. 读取Config 对象
app.config,from_object(Config)
# 3. 创建 对象
db = SQLAlchemy(app)

class Course(db.Model):
	__tablename__='tb_course'
	id = db.Column(db.Integer, primary_key=True, autoincrement=True)
	name = db.Column(db.String(32), nullable=False, unique=True)
	student = db.relationship('Student', backref='course')
	def __repr__(self):
		return '<obj name:{}>'.format(self.name)

class Student(db.Model):
	__tablename__='tb_student'
	id = db.Column(db.Integer,primary_key=True, autoincrement=True)
	name = db.Column(db.String(32), nullable=False, unique=True)
	age = db.Column(db.Integer, default=18)
	# 外键
	course_id = db.Column(db.Integer, db.ForeigmKey('tb_course.id'))
	def __repr__(self):
		return '<obj name:{}>'.format(self.name)
		
if __name__=='__main__'
	db.drop_all()
	db.create_all()
	
	course1 = Course(name='三年一班')
	course2 = Course(name='三年二班')
	course3 = Course(name='三年三班')
	
	stu1 = Student(name='周杰伦', age=40, course_id=course2.id)
	stu2 = Student(name='周杰棍', age=50, course_id=course1.id)
	stu3 = Student(name='双杰伦', age=30, course_id=course2.id)
	stu4 = Student(name='周杰', age=66, course_id=course3.id)
	db.session.add_all([stu1,stu2,stu3,stu4])
	db.session.commit()
	
# 查询:周杰伦哪个班
student_obj = Student.query.filter(Student.name == '周杰伦').first()
ret = student_obj.course.name
print(ret)
	# 法二
course_obj = Course.query.get(1)
print(course_obj.name)

# 删除周杰 关联的记录被置空
std_obj = Student.query.filter(Student.name == '周杰').first()
db.session.delete(std_obj)
db.session.commit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值