python之ORM的使用(1)

---恢复内容开始---

1.ORM是什么?

orm就是对象映射关系程序,简单来世就是类似于python这种面向对象的程序来说一切接对象,它可以将我们平常所使用的SQL语句,转换成可以使用对象模型进行操作的模块,而不是直接使用SQL语句。

2.sqlalchemy的安装

在python中这个模块时最有名的,使用的人较多。

通过PIP 安装:

  

1 pip install SQLALchemy<br><br>pip install pymysql
2  #由于mysqldb依然不支持py3,所以这里我们用pymysql与sqlalchemy交互

3.sqlalchemy基本使用

最开始我们创建一张数据表如下:

1 CREATE TABLE user (
2     id INTEGER NOT NULL AUTO_INCREMENT,
3     name VARCHAR(32),
4     password VARCHAR(64),
5     PRIMARY KEY (id)
6 )

这是最简单的SQL表如果再加上外键什么的,那就更加复杂了,所以就有了我们的sqlalchemy!

 1 import sqlalchemy
 2 from sqlalchemy import create_engine
 3 from sqlalchemy.ext.declarative import declarative_base
 4 from sqlalchemy import Column, Integer, String
 5
 6 engine = create_engine("mysql+pymysql://root:[email protected]/testdb",
 7                                     encoding=‘utf-8‘, echo=True)
 8
 9
10 Base = declarative_base() #生成orm基类
11
12 class User(Base):
13     __tablename__ = ‘user‘ #表名
14     id = Column(Integer, primary_key=True)
15     name = Column(String(32))
16     password = Column(String(64))
17
18 Base.metadata.create_all(engine) #创建表结构

看到这里你可能感觉不出什么,那是因为现在实现的功能比较简单,但是当功能复杂以后,你就会发现这个东西的好处。

除上面的创建之外,还有一种创建表的方式,虽不常用,但还是看看吧

---恢复内容结束---

1.ORM是什么?

orm就是对象映射关系程序,简单来世就是类似于python这种面向对象的程序来说一切接对象,它可以将我们平常所使用的SQL语句,转换成可以使用对象模型进行操作的模块,而不是直接使用SQL语句。

2.sqlalchemy的安装

在python中这个模块时最有名的,使用的人较多。

通过PIP 安装:

  

1 pip install SQLALchemy<br><br>pip install pymysql
2  #由于mysqldb依然不支持py3,所以这里我们用pymysql与sqlalchemy交互

3.sqlalchemy基本使用

最开始我们创建一张数据表如下:

1 CREATE TABLE user (
2     id INTEGER NOT NULL AUTO_INCREMENT,
3     name VARCHAR(32),
4     password VARCHAR(64),
5     PRIMARY KEY (id)
6 )

这是最简单的SQL表如果再加上外键什么的,那就更加复杂了,所以就有了我们的sqlalchemy!

 1 import sqlalchemy
 2 from sqlalchemy import create_engine
 3 from sqlalchemy.ext.declarative import declarative_base
 4 from sqlalchemy import Column, Integer, String
 5
 6 engine = create_engine("mysql+pymysql://root:[email protected]/testdb",
 7                                     encoding=‘utf-8‘, echo=True)
 8
 9
10 Base = declarative_base() #生成orm基类
11
12 class User(Base):
13     __tablename__ = ‘user‘ #表名
14     id = Column(Integer, primary_key=True)
15     name = Column(String(32))
16     password = Column(String(64))
17
18 Base.metadata.create_all(engine) #创建表结构

看到这里你可能感觉不出什么,那是因为现在实现的功能比较简单,但是当功能复杂以后,你就会发现这个东西的好处。

这里还有一种创建表的方式,但是不常用

 1 from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
 2 from sqlalchemy.orm import mapper
 3
 4 metadata = MetaData()
 5
 6 user = Table(‘user‘, metadata,
 7             Column(‘id‘, Integer, primary_key=True),
 8             Column(‘name‘, String(50)),
 9             Column(‘fullname‘, String(50)),
10             Column(‘password‘, String(12))
11         )
12
13 class User(object):
14     def __init__(self, name, fullname, password):
15         self.name = name
16         self.fullname = fullname
17         self.password = password
18
19 mapper(User, user) #the table metadata is created separately with the Table construct, then associated with the User class via the mapper() function

其实第一种就是第二种创建表方式的一种封装

现在来创建一条数据试试

Session_class = sessionmaker(bind=engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class() #生成session实例

user_obj = User(name="alex",password="alex3714") #生成你要创建的数据对象
print(user_obj.name,user_obj.id)  #此时还没创建对象呢,不信你打印一下id发现还是None

Session.add(user_obj) #把要创建的数据对象添加到这个session里, 一会统一创建
print(user_obj.name,user_obj.id) #此时也依然还没创建

Session.commit() #现此才统一提交,创建数据

查询:

1 my_user = Session.query(User).filter_by(name="alex").first()
2 print(my_user)

他输出的是:

<__main__.User object at 0x105b4ba90>

他返回的是一个对象,所以是这个样子,你可以通过调出他里面对象的方式来显示。

1 print(my_user.id,my_user.name,my_user.password)
2
3 输出
4 1 alex alex3714

不过刚才上面的显示的内存对象对址你是没办法分清返回的是什么数据的,除非打印具体字段看一下,如果想让它变的可读,只需在定义表的类下面加上这样的代码

def __repr__(self):
    return "<User(name=‘%s‘,  password=‘%s‘)>" % (
        self.name, self.password)

修改

1 my_user = Session.query(User).filter_by(name="alex").first()
2
3 my_user.name = "Alex Li"
4
5 Session.commit()

回滚

 1 my_user = Session.query(User).filter_by(id=1).first()
 2 my_user.name = "Jack"
 3
 4
 5 fake_user = User(name=‘Rain‘, password=‘12345‘)
 6 Session.add(fake_user)
 7
 8 print(Session.query(User).filter(User.name.in_([‘Jack‘,‘rain‘])).all() )  #这时看session里有你刚添加和修改的数据
 9
10 Session.rollback() #此时你rollback一下
11
12 print(Session.query(User).filter(User.name.in_([‘Jack‘,‘rain‘])).all() ) #再查就发现刚才添加的数据没有了。
13
14 # Session
15 # Session.commit()

获取所有数据

print(Session.query(User.name,User.id).all() )

多条件查询

1 objs = Session.query(User).filter(User.id>0).filter(User.id<7).all()

上面2个filter的关系相当于 user.id >1 AND user.id <7 的效果

统计和分组

Session.query(User).filter(User.name.like("Ra%")).count()

分组

from sqlalchemy import func
print(Session.query(func.count(User.name),User.name).group_by(User.name).all() )

输出为:

[(1, ‘Jack‘), (2, ‘Rain‘)]

外键关联

创建一个address表,跟user表关联

 1 from sqlalchemy import ForeignKey
 2 from sqlalchemy.orm import relationship
 3
 4 class Address(Base):
 5     __tablename__ = ‘addresses‘
 6     id = Column(Integer, primary_key=True)
 7     email_address = Column(String(32), nullable=False)
 8     user_id = Column(Integer, ForeignKey(‘user.id‘))
 9
10     user = relationship("User", backref="addresses") #这个nb,允许你在user表里通过backref字段反向查出所有它在addresses表里的关联项
11
12     def __repr__(self):
13         return "<Address(email_address=‘%s‘)>" % self.email_address

表创建好以后可以反查试试

1 obj = Session.query(User).first()
2 for i in obj.addresses: #通过user对象反查关联的addresses记录
3     print(i)
4
5 addr_obj = Session.query(Address).first()
6 print(addr_obj.user.name)  #在addr_obj里直接查关联的user表

创建关联对象

1 obj = Session.query(User).filter(User.name==‘rain‘).all()[0]
2 print(obj.addresses)
3
4 obj.addresses = [Address(email_address="[email protected]"), #添加关联对象
5                  Address(email_address="[email protected]")]
6
7
8 Session.commit()

原文地址:https://www.cnblogs.com/qybk/p/9229229.html

时间: 2024-12-24 00:39:57

python之ORM的使用(1)的相关文章

Python MySQL ORM QuickORM hacking

# coding: utf-8 # # Python MySQL ORM QuickORM hacking # 说明: # 以前仅仅是知道有ORM的存在,但是对ORM这个东西内部工作原理不是很清楚, # 这次正好需要用到,于是解读一个相对来说很简单的Python2 ORM的例子. # # 参考源码: # A simple ORM provides elegant API for Python-MySQL operation # https://github.com/2shou/QuickORM

Python实现ORM

ORM即把数据库中的一个数据表给映射到代码里的一个类上,表的字段对应着类的属性.将增删改查等基本操作封装为类对应的方法,从而写出更干净和更富有层次性的代码. 以查询数据为例,原始的写法要Python代码sql混合,示例代码如下: 1 import MySQLdb 2 import os,sys 3 4 def main(): 5 conn=MySQLdb.connect(host="localhost",port=3306,passwd='toor',user='root') 6 co

【Python】ORM框架SQLAlchemy的使用

ORM和SQLAlchemy简介 对象关系映射(Object Relational Mapping,简称ORM),简单的来说,ORM是将数据库中的表与面向对象语言中的类建立了一种对应的关系.然后我们操作数据库的时候,数据库中的表或者表中的某一行,直接通过操作类或者类的实例就可以完成了. SQLAlchemy是Python社区最知名的ORM工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. SQLAlchemy是建立在数据库API之上,使用关系对象映射进行数据库操作,简单的来说

python 编写ORM

在一个Web App中,所有数据,包括用户信息.发布的日志.评论等,都存储在数据库中.在awesome-python3-webapp中,我们选择MySQL作为数据库. Web App里面有很多地方都要访问数据库.访问数据库需要创建数据库连接.游标对象,然后执行SQL语句,最后处理异常,清理资源.这些访问数据库的代码如果分散到各个函数中,势必无法维护,也不利于代码复用. 所以,我们要首先把常用的SELECT.INSERT.UPDATE和DELETE操作用函数封装起来. 由于Web框架使用了基于as

Python Day73django ORM模型

python的类名--------------->SQL语句的表名 python的类属性--------------->SQL语句的表名下的字段 python的类属性的约束--------------->SQL语句的表名下的字段类型 类的实例对象--------------->表中的一条记录 一.创建表(建立模型) 1.创建类(创建表) 在应用的models.py文件中创建类,如下例: from django.db import models class Student(model

python mysql orm

Python中操作mysql的pymysql模块详解:https://www.cnblogs.com/wt11/p/6141225.html Python 12 - Mysql & ORM:https://www.cnblogs.com/wuzdandz/p/7764416.html [Python之路Day13]网络篇之MySQL.ORM框架:https://www.cnblogs.com/dubq/p/5702667.html python对mysql的操作:https://www.cnbl

Python - Django - ORM 查询方法

models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() birthday = models.DateField(auto_now_add=True) 在数据库中添加几条数据 在 Python 脚本中调用 Dj

48.Python中ORM模型实现mysql数据库基本的增删改查操作

首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'orm_intro_dem', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', } } 之后将创建的app添加到settings.py文件中的INSTALLED_APPS中

Python之ORM

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中.那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法. class Field(object): def __init__(self, name, colum_type): self.name = name