Flask Sqlalchemy 常用操作

SQLAlchemy 参考文档

使用Flask-SQLAlchemy

  • 连接数据库
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:88888888@127.0.0.1/test'  # 从SQLAlchemy将取出这个属性作为连接字符串
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 用于追踪对象修改,可以关闭
db = SQLAlchemy(app)
  • 定义表模型Class
from app import db
class Contacts(db.Model):
    __tablename__ = 'contacts'  # 默认表名,可以不定义

    id = db.Column(db.INTEGER, primary_key=True)
    name = db.Column(db.String(20))
    tel = db.Column(db.String(12))
	"""常用的一些参数
	primary_key: 主键
	unique: 唯一健
	index: 建立索引
	nullable: 是否可以为空
	default: 默认值
	"""
  • 创建表,使用db.create_all(),在使用该命令前一定要确保Contacts 类被本页面导入,如果使用其他软件已经创建了表结构则不需要执行该方法

数据操作

  • 增删改查
	from main.dao.contacts import Contacts
    # 查询一条记录
    # one_or_none(),这个方法在查询不到的时候返回None
    row = Contacts.query.first() 
    print(row.name)

    # 删除一条记录
    # .get()方法如果没找到id则会返回None
    row = Contacts.query.get(14)
    if row:
        db.session.delete(row)
        db.session.commit()

    # 插入一条记录
    insert_row = Contacts(id='14', name='xiangsuwei', tel='18822222222')
    db.session.add(insert_row)
    db.session.commit()

    # 更新一条记录
    row = Contacts.query.get(14)
    row.name = 'YangZhi'
    db.session.commit()

  • 实战应用写法
	from main.dao.contacts import Contacts

# 获取多条记录,这种写法适合在代码中传参
    name = 'YangZhi'
    q = Contacts.query
    q = q.filter(Contacts.name.like("%{}%".format(name)))
    rows = q.all()
    array = []
    for row in rows:
        id = row.id
        name = row.name
        tel = row.tel
        array.append(str(id) + name + tel + '\n')
        
    print(array)

数据获取常用方法

  • get(id): 通过主键获取记录,没有则返回None
  • count(): 返回行数
  • all(): 返回所有记录的列表
  • first(): 返回第一条记录,没有则返回None
  • one(): 只能返回一条记录,否则抛出异常
  • one_or_none(): 与one类似,如果没有一条记录则返回None
  • first_or_404(): 返回第一条记录,如果不存在则返回404错误

高级用法

  • 排序,限制
from main.dao.contacts import Contacts

q = Contacts.query
# 如果是倒序就在字段前加一个'-', [0:50]就是获取前0-50条数据
row = q.order_by(-UsersTable.create_time)[0:50]
  • textual与传参
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text

rows = Contacts.query.filter(text("name=:name")).params(name='Yanzhi').all()
array = ''
for row in get_specific_rows:
    id = row.id
    name = row.name
    tel = row.tel
    array += str(id) + name + tel + '\n'
return array, 200
  • 直接写入SQL语句,并映射成相应类的字段
    stmt = text("SELECT name, id, tel FROM contacts where name=:name")
    # 映射获取的字段到类的属性名
    stmt = stmt.columns(Contacts.name, Contacts.id, Contacts.tel)
    # 写法使用Contacts.query.from_statement(stmt)也是一样的
    rows = db.session.query(Contacts).from_statement(stmt).params(name='YangZhi').all()

    array = ''
    for row in get_specific_rows:
        id = row.id
        name = row.name
        tel = row.tel
        array += str(id) + name + tel + '\n'
    return array, 200
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值