python经典orm框架sqlalchemy

在一般的项目中,简单的访问数据库用pymysql就可以了,手写一些SQL也没有什么问题,但是对于一个大型系统,可能面对多次的数据库增删改查操作,如果都用手写SQL实现,代码会显得很难看,开发效率也比较低,这个时候就推荐使用orm框架了。

python的orm框架有很多,我最早接触的是django的内嵌orm,用起来的确很不错,但目前并没有独立出来。

独立的框架里面,比较经典的就是本文的主角sqlalchemy了。

复制代码
from sqlalchemy import Column, String, create_engine, Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建对象的基类:
Base = declarative_base()
# 初始化数据库连接:
engine = create_engine('mysql+pymysql://root:******@localhost:3306/scheduler')


# 定义User对象:
class User(Base):
    # 表的名字:
    __tablename__ = 'user'

    # 表的结构:
    id = Column(String(20), primary_key=True)
    name = Column(String(20))
    age = Column(Integer)

    def __repr__(self):
        return 'User(id={id},name={name},age={age})'.format(id=self.id, name=self.name, age=self.age)


# 创建所有定义的表到数据库中
def init_db():
    Base.metadata.create_all(engine)


# 从数据库中删除所有定义的表
def drop_db():
    Base.metadata.drop_all(engine)


if __name__ == '__main__':
    drop_db()
    init_db()
    # 创建DBSession类型:
    DBSession = sessionmaker(bind=engine)
    # 创建session对象:
    session = DBSession()
    # 创建新User对象:
    new_user = User(id='7', name='ali', age=11)
    user1 = User(id='8', name='mary', age=12)
    user2 = User(id=1, name='bob', age=12)
    # 插入数据
    session.add(new_user)
    session.add_all([user2, user1])
    # 提交即保存到数据库:
    session.commit()
    # 更新数据
    session.query(User).filter(User.name == 'ali').update({'name': 'da'})
    # 删除数据
    session.query(User).filter(User.id == 1).delete()
    session.commit()
    # 查询数据
    ret = session.query(User).all()
    print(ret)
    session.close()
复制代码

 

sqlalchemy 的功能当然不止于此,随着后面的学习,我会继续补充到这里。

参考:

https://www.liaoxuefeng.com/wiki/1016959663602400/1017803857459008

posted @   Mars.wang  阅读(1520)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示