Flask SQLAlchemy 常用查询操作

测试源码

Github源码地址

sql数据来源,https://zhuanlan.zhihu.com/p/53302593

表结构 https://zhuanlan.zhihu.com/p/38354000

sqlalchemy参考 https://www.osgeo.cn/sqlalchemy/tutorial/data.html#selecting-data

import argparse

from datetime import datetime

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import backref


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app, engine_options={
   'echo': True})


class Student(db.Model):
    sid = db.Column(db.String(10), primary_key=True)
    sname = db.Column(db.String(10))
    sage = db.Column(db.DateTime())
    ssex = db.Column(db.String(10))

    scores = db.relationship('Score', backref='student', lazy=True)

    def __repr__(self):
        return '<Student - Sid: %s, Sname: %s>' % (self.sid, self.sname)


class Course(db.Model):
    cid = db.Column(db.String(10), primary_key=True)
    cname = db.Column(db.String(10))
    tid = db.Column(db.String(10), db.ForeignKey('teacher.tid'))

    scores = db.relationship('Score', backref='course', lazy=True)

    def __repr__(self):
        return '<Course %s>' % self.cname


class Teacher(db.Model):
    tid = db.Column(db.String(10), primary_key=True)
    tname = db.Column(db.String(10))

    courses = db.relationship('Course', backref='teacher', lazy=True)

    def __repr__(self):
        return '<Teacher %s>' % self.tname


class Score(db.Model):
    sid = db.Column(db.String(10), db.ForeignKey('student.sid'), primary_key=True)
    cid = db.Column(db.String(10), db.ForeignKey('course.cid'), primary_key=True)
    score = db.Column(db.Integer)

    def __repr__(self) -> str:
        return '<Score - Student: %s, Course: %s, Score: %s>' % (self.sid, self.cid, self.score)


def init_database():
    db.create_all()
    students = [
        Student(sid='01', sname='赵雷', sage=datetime.strptime(
            '1990-01-01', '%Y-%m-%d'), ssex='男'),
        Student(sid='02', sname='钱电', sage=datetime.strptime(
            '1990-12-21', '%Y-%m-%d'), ssex='男'),
        Student(sid='03', sname='孙风', sage=datetime.strptime(
            '1990-05-20', '%Y-%m-%d'), ssex='男'),
        Student(sid='04', sname='李云', sage=datetime.strptime(
            '1990-08-06', '%Y-%m-%d'), ssex='男'),
        Student(sid='05', sname='周梅', sage=datetime.strptime(
            '1991-12-01', '%Y-%m-%d'), ssex='女'
SQLAlchemyPython 中最流行的 ORM(对象关系映射)框架之一,它支持多种数据库,包括 PostgreSQL、MySQL、SQLite 等。下面是一些 SQLAlchemy 常用的数据库操作: 1. 创建表: ```python from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) email = Column(String(120), unique=True) ``` 在上面的示例中,我们使用 SQLAlchemy 的 declarative_base() 函数创建一个基类 Base,然后定义了一个名为 User 的表,包括三个字段:id、name 和 email。 2. 插入数据: ```python from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker engine = create_engine('sqlite:///example.db', echo=True) Session = sessionmaker(bind=engine) session = Session() new_user = User(name='John Doe', email='johndoe@example.com') session.add(new_user) session.commit() ``` 在上面的示例中,我们使用 create_engine() 函数创建一个数据库引擎,并使用 sessionmaker() 函数创建一个会话对象。然后,我们创建一个新的 User 对象并将其添加到会话中,最后提交会话以保存数据。 3. 查询数据: ```python users = session.query(User).all() for user in users: print(user.name, user.email) ``` 在上面的示例中,我们使用 query() 方法查询 User 表中的所有数据,并使用 all() 方法获取查询结果。然后,我们遍历查询结果并打印每个用户的姓名和电子邮件地址。 4. 更新数据: ```python user = session.query(User).filter_by(name='John Doe').first() user.email = 'newemail@example.com' session.commit() ``` 在上面的示例中,我们使用 query() 方法查询 User 表中姓名为 'John Doe' 的用户,并更新其电子邮件地址为 'newemail@example.com'。最后,我们提交会话以保存更改。 5. 删除数据: ```python user = session.query(User).filter_by(name='John Doe').first() session.delete(user) session.commit() ``` 在上面的示例中,我们使用 query() 方法查询 User 表中姓名为 'John Doe' 的用户,并删除该用户。最后,我们提交会话以保存更改。 总之,SQLAlchemy 提供了一组强大的 API,可以帮助我们轻松地进行数据库操作,包括创建表、插入数据、查询数据、更新数据和删除数据等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值