数据库 ORM 的概念及使用

ORM(对象关系映射)是一种将数据库操作转化为Python代码的技术,使得开发者无需直接写SQL即可与数据库交互。本文以SQLAlchemy为例,介绍了如何创建连接、定义数据模型、执行增删查改操作。通过示例代码,展示了如何使用session对象进行数据操作,包括添加、查询、修改和删除数据。

ORM(Object Relational Mapping) 对象关系映射

ORM 是一个操作数据库框架
ORM 会将python 的代码翻译成对应数据库的sql语句
ORM 会将 数据库中的表映射成 python中的类
一张表就是一个类
将表中的字段映射成类的属性

所以我们在使用orm时 可以不关心你用的什么数据库 只关心我们的业务逻辑
及时开发人员不会sql语句 也能和数据库进行交互

缺点:
Orm生成的sql语句不是最优的sql语句 执行效率会比较低

Python中有一个sqlalchemy
仿照的是Django框架的orm
Flask 有一个orm插件 flask-sqlalchemy

安装:
Pip install sqlalchemy

import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base

类似于 pymysql中的游标

from sqlalchemy.orm import sessionmaker

1.创建连接

数据库类型:// 用户名:密码@主机地址/你要操作的数据库

mysql://scott:tiger@hostname/dbname

db = sqlalchemy.create_engine(‘mysql://root:123123@localhost/sqlorm’)

2.创建基类

base = declarative_base(db)

3.创建类 必须继承基类 创建模型

class User(base):
# 表名
tablename=‘user’
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32)) # varchar()
age = sqlalchemy.Column(sqlalchemy.Integer)
class Userinfo(base):
tablename=‘userinfo’
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
phone = sqlalchemy.Column(sqlalchemy.String(20))
class Shop(base):
tablename=‘shop’
id = sqlalchemy.Column(sqlalchemy.Integer,primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(32))
if name == ‘main’:
# 执行数据库迁移 创建表
base.metadata.create_all(db)
# 绑定一个实例
s = sessionmaker(bind=db)
# 创建会话对象 类似于游标
session = s()

添加

user = User(name=‘hello’,age=16)

session.add(user)

session.commit()

session.add_all([

User(name=‘world’,age=1),

User(name=‘python’,age=28),

User(name=‘PHP’, age=30),

])

session.commit()

查询

查询所有的数据 返回一个列表

res = session.query(User).all()

for i in res:

print(i.name,i.age)

通过主键查询一条数据 返回一个对象

res = session.query(User).get(1)

print(res.name,res.age)

条件查询 返回的是一个列表

res = session.query(User).filter_by(name=‘hello’).all()

print(res)

res = session.query(User).filter(User.name==‘hello’).all()

print(res)

修改数据

res = session.query(User).get(1)

print(res.name)

res.name=‘HELLO’

session.commit()

删除数据

res = session.query(User).get(1)
session.delete(res)
session.commit()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值