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()
来源:51CTO
作者:郭子琦
链接:https://blog.csdn.net/Z_XMG/article/details/100403438