python ORM的使用
安装 >pip install sqlalchemy
#coding=utf-8
'''
原始的sql语句
CREATE TABLE user (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(32),
password VARCHAR(64),
PRIMARY KEY (id) )
'''
#使用orm代码 import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
engine = create_engine("mysql+pymysql://root:123456@192.168.70.129/my", #建立数据库连接
encoding='utf-8', echo=False) #打印echo信息
Base = declarative_base() # 生成orm基类
class User(Base):
__tablename__ = 'user1' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64)) def __repr__(self):
return '%s name:%s' % (self.id, self.name) class User2(Base):
__tablename__ = 'user2' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64)) def __repr__(self):
return '%s name:%s'%(self.id,self.name) Base.metadata.create_all(engine) # base运行之后就会把继承他的所有子类表创建起来
#另一种不常用的创建方式
'''
from sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey
from sqlalchemy.orm import mapper
metadata = MetaData()
user = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('fullname', String(50)),
Column('password', String(12))
)
class User(object):
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
mapper(User,
user) # the table metadata is created separately with the Table construct, then associated with the User class via the mapper() function
'''
#————————————————————————增加————————————————————
from sqlalchemy.orm import sessionmaker #操作表要导入这个模块
Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,
# 注意,这里返回给session的是个class,不是实例,与数据库连接绑定bind=engine
Session = Session_class() # 生成session实例 相当于pymysql里面的cursor
# user_obj = User(name="dzz", password="123456") # 生成你要创建的数据对象
# user_obj1 = User(name="asd", password="123456")
# user_obj2 = User2(name="asd", password="123456")
# print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None
# Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建
# Session.add(user_obj2)
# Session.add(user_obj1)
#
# print(user_obj.name, user_obj.id) # 此时也依然还没创建
# Session.commit() # 现此才统一提交,创建数据
# print(user_obj.name, user_obj.id,user_obj.password)
#——————————————查询
data = Session.query(User2).filter_by(name = 'zq').all() #返回一个列表,查一条
print '++>',data[0].name,data[0].password
print '++>',data data = Session.query(User2).filter_by().all() #在User2表的类里面加入了__repr__内置方法,就可显示了
print data data = Session.query(User2).filter(User2.id>1).first() #单条,
print '>>',data data = Session.query(User2).filter(User2.id>1).filter(User2.id<3).first() #多条
print '>>',data #修改——————————
data = Session.query(User2).filter(User2.id>1).filter(User2.id<3).first() #多条件
print '>>',data
data.name = 'rest'
data.password = 'qqqqq'
Session.commit()
data = Session.query(User2).filter(User2.id>1).filter(User2.id<3).all()
print '>>',data
#回滚——————
user_obj4 = User2(name="zte", password="123456")
Session.add(user_obj4)
print '>>>#',Session.query(User2).filter(User2.name.in_(['zte'])).all()
Session.rollback()
print Session.query(User2).filter(User2.name.in_('zte')).all()
#分组统计
data = Session.query(User2).filter(User2.id>1).filter(User2.id<4).count()
print data from sqlalchemy import func #分组需要导入一个模块
data = Session.query(User2.name,func.count(User2.name)).group_by(User2.name).all()
print data #连表查询
print Session.query( User2,User).filter(User2.id == User.id).all()
#print Session.query( User2).join(User).all() #要求两个表有外键关联
#print Session.query( User2).join(User,isouter=True).all()
python ORM的使用的更多相关文章
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
- Django和SQLAlchemy,哪个Python ORM更好?
ORM是什么? 在介绍Python下的两个ORM框架(Django和SQLAlchemy)的区别之前,我们首先要充分了解ORM框架的用途. ORM代表对象关系映射.ORM中的每个单词解释了他们在实际项 ...
- Python ORM框架之 Peewee入门
之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类.对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立出来使用就好了,那我们平台操作数据库也可 ...
- python orm框架
#!/usr/bin/python# -*- coding: utf-8 -*-from sqlalchemy import create_enginefrom sqlalchemy import T ...
- MySQL(Python+ORM)
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python ORM框架之SQLAlchemy
前言: Django的ORM虽然强大,但是毕竟局限在Django,而SQLAlchemy是Python中的ORM框架: SQLAlchemy的作用是:类/对象--->SQL语句--->通过 ...
- Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
1. 添加一个新对象 前面介绍了映射到实体表的映射类User,如果我们想将其持久化(Persist),那么就需要将这个由User类建立的对象实例添加到我们先前创建的Session会话实例中: 复制代码 ...
- python ORM - sqlalchemy 操作使用
python操作数据库 使用 ORM - sqlalchemy,pymsql 安装: pip install pymsq pip install sqlalchemy 一. '''连接数据库''' ...
- Python ORM
本章内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果 ...
- python orm / 表与model相互转换
orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的 ...
随机推荐
- vsftp 主动模式安装
server:192.168.109.137 client:192.168.109.138 ------------------------------------------------------ ...
- 【转】C/C++产生随机数
转自:https://www.cnblogs.com/vectors07/p/8185215.html C/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里 ...
- BZOJ3129/洛谷P3301方程(SDOI2013)容斥原理+扩展Lucas定理
题意:给定方程x1+x2+....xn=m,每个x是正整数.但是对前n1个数做了限制x1<=a1,x2<=a2...xn1<=an1,同时对第n1+1到n1+n2个数也做了限制xn1 ...
- 外媒:Apple面临着印度iPhone的停用
据外媒报道:印度电信管理局(TRAI)制定遏制令人讨厌的消息的新规则可能导致印度数百万部iPhone的停用. 该监管机构本周早些时候宣布了“2018年电信商业通信客户偏好规定”,根据该规定,它已提议“ ...
- ubuntu安装pandas
1 安装依赖包 setuptools Numpy: 1.7.1 or higher python-dateutil: 1.5 or higher pytz: Needed for time zone ...
- select自定义箭头问题 。。。和一行内不同颜色的整体鼠标滑过变色
1.select自定义箭头问题 用<select><option></option></select>的时候自带的三角箭头与需要的三角不同,这是还要求有 ...
- 为应用程序池 ''DefaultAppPool'' 提供服务的进程意外终止。进程 ID 是 ''xxx''问题的解决方法
网上提供了很多办法,都未解决. 解决过程一波三折,依次用了下列方法: 1.解决办法 点击“开始”-“控制面板”-“管理工具”-“组件服务”-“计算机”-“我的电脑”-“DCOM”选项, 选择其下的“I ...
- 20180826(02)-Java集合框架
Java 集合框架 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组. 虽然这些类都非常有用 ...
- tomcat配置解决乱码问题
在服务器上,如果项目是Tomcat启动的,可以用以下方式的设置解决乱码问题: 方法1.在Tomcat的catalina.sh(或者catalina.bat)文件中,开头加入: set JAVA_OPT ...
- day18—Flex弹性布局详解(二)
转行学开发,代码100天——2018-04-03 2.6 align-content属性 align-content 属性定义了在交叉轴方向对齐方式和额外空间分配,类似于justify-content ...