ORM 的概念及使用

匿名 (未验证) 提交于 2019-12-02 23:57:01

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()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!