Flask-ORM操作MYSQL(实现增删改查)

首先实现增加数据的功能

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker

HOSTNAME = '127.0.0.1'
DATABASE = 'student'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'

DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}'
	.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

engine = create_engine(DB_URL)

# 继承这个函数生成的基类
Base = declarative_base(engine)

# ORM操作数据库
class Test(Base):
    # 定义表的名字
    __tablename__ = 'test'

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(50), nullable=False)


# 模型映射到数据库中
Base.metadata.create_all()

article1 = Test(name='hangshao')
article2 = Test(name='handsome')

# 保存到数据库中
# 类的实例化   __call__  将类变成方法去调用
Session = sessionmaker(bind=engine)
session = Session()

# 添加
session.add(article1)
session.add(article2)
# session.add_all([article1, article1])

# 提交
session.commit()

print(article1.name)
print(article1.id)
print(article2.name)
print(article2.id)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后将增删改查封装进四个方法里

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker

HOSTNAME = '127.0.0.1'
DATABASE = 'student'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'

DB_URL = 'mysql+mysqlconnector://{}:{}@{}:{}/{}'
	.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

engine = create_engine(DB_URL)

# 继承这个函数生成的基类
Base = declarative_base(engine)

# ORM操作数据库
class Test(Base):
    # 定义表的名字
    __tablename__ = 'article'

    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50), nullable=False)
    content = Column(String(50))
    author = Column(String(50))

    def __str__(self):
        return "[title:{}],[content:{}],[author:{}]"
        	.format(self.title, self.content, self.author)

# 模型映射到数据库中
Base.metadata.create_all()

# 保存到数据库中
# 类的实例化   __call__  将类变成方法去调用
Session = sessionmaker(bind=engine)
session = Session()

def add_data():
    article = Test(title='Python', content='人生苦短,我用Python', 
    			author='coder')
    session.add(article)
    # session.add_all([article1, article1])
    session.commit()


def search_data():
    # 查询所有数据 all()
    data = session.query(Test).all()
    for item in data:
        print(item)

    # 条件查询 filter()
    # data = session.query(Test).filter(Test.title=='Python').all()
    # for item in data:
    #     print(item)

    # 查询第一条 first()
    # data = session.query(Article).first()
    # print(data)

    # 查询第n条 get(n)
    data = session.query(Test).get(1)
    print(data)


def update_data():
    # 查询出要修改的这条记录
    article = session.query(Test).first()
    article.author = 'hangshao'
    print(article.author)
    session.commit()

    # 回滚
    # session.rollback()


def delete_data():
    # 查询出要修改的这条记录
    article = session.query(Test).first()
    session.delete(article)
    session.commit()

    # 以防误删除操作:
    # is_delete 1 未删除  0 删除
    # 删除 == is_delete 1=>0


if __name__ == '__main__':
    add_data()
    # search_data()
    # update_data()
    # delete_data()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字段的数据类型和约束

类型:

Integer:整形
Float:浮点类型
Boolean:传递True/False进去
DECIMAL:定点类型
enum:枚举类型
Date:传递datetime.date()进去   日期 年月日
DateTime:传递datetime.datetime()进去   年月日 时分秒
Time:传递datetime.time()进去       时分秒
String:字符类型,使用时需要指定长度,区别于Text类型
Text:文本类型
LONGTEXT:长文本类型     文章的内容

约束:

default:默认值
nullable:是否可空  nullable = False  不允许为空
primary_key:是否为主键
unique:是否唯一    存放的内容 是唯一的!!!
autoincrement:是否自动增长
onupdate:更新的时候执行的函数  这条记录做更新的时候 会执行的
name:该属性在数据库中的字段映射
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值