#!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/6 21:29
#__author__='Administrator'
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine
from sqlalchemy import func #统计 # 用户 密码 主机 库
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/test",encoding="utf-8",echo=False) Base = declarative_base()#生成orm 基类
class User_2(Base):
__tablename__='user' #表名
id = Column(Integer,primary_key=True)#整数类型 设为主键
name = Column(String(32))#字符串类型
age = Column(Integer)
addr= Column(String(256)) def __repr__(self):#输出查询
return '%s>name:%s--age:%saddrs:%s'%(self.id,self.name,self.age,self.addr) Session_class=sessionmaker(bind=engine)#创建与数据库的会话 类
Session=Session_class()#生成实例 #增加
'''
user_obj =User(name="sa2",addrs="1234")#生成你要创建的数据对象
Session.add(user_obj)# 添加记录
'''
#添加一组数据
'''
Session.add_all([
User(name="abcg",age=34,addr="sdfsdf"),
User(name="bcdq",age=11,addr="chaense")
])
'''
#删除
'''
Session.query(User).filter(User.id>3).filter(User.id<6).delete()
'''
# 查询 条件 所有
data =Session.query(User_2).filter_by(id=2).all()
# 多个条件
data2 =Session.query(User_2).filter(User_2.id>2).filter(User_2.id<5).all() #改 Session.query(User_2).filter(User_2.id ==2).update({"name" : ""})
print(data)
print(data2)
'''
print(Session.query(User).filter(User.id>2).filter(User.name.in_(["sa",'sa2'])).all())
Session.rollback()#回滚操作
print(Session.query(User).filter(User.id>2).filter(User.name.in_(["sa",'sa2'])).all())
'''
print(Session.query(User_2).filter(User_2.id>2).filter(User_2.name.in_(["sa",'sa2'])).count())#统计符合条件出现的次数
counts=Session.query(User_2).filter(User_2.id>2).filter(User_2.name.in_(['bcd'])).count()#统计符合条件出现的次数
print(counts)
#分组查询 字段 统计次数 字段
gurps=Session.query(User_2.name,func.count(User_2.name)).group_by(User_2.name).all()
print(gurps)
# 以addrs为条件
gurps1=Session.query(User_2.name,func.count(User_2.name)).group_by(User_2.addr).all()
print(gurps1) Session.commit()#关闭事务

sqlalchemy 基本操作

 from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine
# 用户 密码 主机 库
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/test",encoding="utf-8",echo=True) Base = declarative_base()#生成orm 基类
class User(Base):
__tablename__='info_l' #表名
id = Column(Integer,primary_key=True)#整数类型 设为主键
name = Column(String(32))#字符串类型
addrs= Column(String(256)) Base.metadata.create_all(engine)#创建表结构 Session_class=sessionmaker(bind=engine)#创建与数据库的会话 类
Session=Session_class()#生成实例 user_obj =User(name="sa",addrs="")#生成你要创建的数据对象
print(user_obj.name,user_obj.addrs)#此时并未创建对象
Session.add(user_obj)#开启事务进行连接 添加记录
Session.commit()#关闭事务

外键操作示例

 #!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/7 10:28
#__author__='Administrator'
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,DATE
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine
# 用户 密码 主机 库
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/test",encoding="utf-8",echo=False) Base = declarative_base()#生成orm 基类 class Studes(Base):#学生类
__tablename__ ='studes'
id = Column(Integer,primary_key=True)#整数类型 设为主键
name = Column(String(32),nullable=False)#字符串类型 不能为空
register_day= Column(DATE,nullable=False)#日期 def __repr__(self):#输出查询
return '%s>name:%s--register_day :%s'%(self.id,self.name,self.register_day) class Studes_Cr(Base):#课程类
__tablename__ ='stud_cr'
id = Column(Integer,primary_key=True)#整数类型 设为主键
day= Column(Integer,nullable=False)
status= Column(String(35),nullable=False)#上课记录
stu_id= Column(Integer,ForeignKey("studes.id",))#外键关联
studes=relationship("Studes",backref="m_study_reg")#自定义关联反查 def __repr__(self):#输出查询 自定义 外键关联调用
return '%s>day:%s status:%s'%(self.studes.name,self.day,self.status) Base.metadata.create_all(engine)#创建表结构 Session_class=sessionmaker(bind=engine)#创建与数据库的会话 类
Session=Session_class()#生成实例 '''
s1 = Studes(name="Alex",register_day='2017-05-06')#学生
s2 = Studes(name="bolg",register_day='2017-03-06')
s3 = Studes(name="calm",register_day='2017-01-07')
s4 = Studes(name="Defr",register_day='2017-03-16')
s5 = Studes(name="Eale",register_day='2017-02-24') study_obj1=Studes_Cr(day=1,status="YES",stu_id=1)#上课记录
study_obj2=Studes_Cr(day=1,status="YES",stu_id=2)#上课记录
study_obj3=Studes_Cr(day=1,status="NO",stu_id=3)#上课记录
study_obj4=Studes_Cr(day=1,status="YES",stu_id=4)#上课记录
study_obj5=Studes_Cr(day=2,status="NO",stu_id=1)#上课记录
study_obj6=Studes_Cr(day=2,status="YES",stu_id=2)#上课记录
study_obj7=Studes_Cr(day=2,status="YES",stu_id=3)#上课记录 #一次全部添加
Session.add_all([s1,s2,s3,s4,s5,study_obj1,study_obj2,study_obj3,study_obj4,study_obj5,study_obj6,study_obj7])
''' #查询 学生对应的信息
stu_obj= Session.query(Studes).filter(Studes.name=="Alex").first()
print(stu_obj)
#通过外键进行相关信息查询
print(stu_obj.m_study_reg) Session.commit()

外键 多外键关联示例:   多外键关联.py  多外键_操作.py

多外键关联.py

 #!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/7 13:06
#__author__='Administrator' from sqlalchemy import Integer, ForeignKey, String, Column
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine Base = declarative_base()#生成orm 基类
class Customer(Base):
__tablename__ = 'customer'
id = Column(Integer, primary_key=True)
name = Column(String(32),nullable=False) billing_address_id = Column(Integer, ForeignKey("address.id"))#帐单地址外键关联
shipping_address_id = Column(Integer, ForeignKey("address.id"))#收货地址外键关联 billing_address = relationship("Address",foreign_keys=[billing_address_id])#帐单地址自定义反查 对应外键
shipping_address = relationship("Address",foreign_keys=[shipping_address_id])#收货地址 class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
street = Column(String(32))#详细
city = Column(String(32))#市
state = Column(String(255))#省 def __repr__(self):
return self.state+self.city+self.street # 用户 密码 主机 库
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/test",encoding="utf-8",echo=False) Base.metadata.create_all(engine)#创建表结构

多外键_操作.py

 #!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/7 13:21
#__author__='Administrator'
import os ,sys
from day66 import 多外键关联
from sqlalchemy.orm import relationship,sessionmaker
from sqlalchemy import create_engine
Session_class=sessionmaker(bind=多外键关联.engine)#创建与数据库的会话 类
Session=Session_class()#生成实例
'''
addr1=多外键关联.Address(street="btxw",city='xy',state="fj")
addr2=多外键关联.Address(street="jjqy",city='qz',state="fj")
addr3=多外键关联.Address(street="ml",city='pt',state="fj") Session.add_all([addr1,addr2,addr3])#写入数据库 c1=多外键关联.Customer(name='calmyan',billing_address=addr1,shipping_address=addr1)
c2=多外键关联.Customer(name='alex',billing_address=addr3,shipping_address=addr2)
Session.add_all([c1,c2])
''' #查询
sobj=Session.query(多外键关联.Customer).filter(多外键关联.Customer.name=='calmyan').first() print(sobj.name,sobj.billing_address,sobj.shipping_address) Session.commit()

多对多外键示例:

orm_s.py

 #!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/7 14:07
#__author__='Administrator' #一本书可以有多个作者,一个作者又可以出版多本书 from sqlalchemy import Table, Column, Integer,String,DATE, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker Base = declarative_base() #创建第三张表,自动维护
book_m2m_author = Table('book_m2m_author', Base.metadata,
Column('book_id',Integer,ForeignKey('books.id')),#关联外键,书id
Column('author_id',Integer,ForeignKey('authors.id')),#关联外键,作者id
) class Book(Base):#书名
__tablename__ = 'books'
id = Column(Integer,primary_key=True)
name = Column(String(64))
pub_date = Column(DATE)
authors = relationship('Author',secondary=book_m2m_author,backref='books') def __repr__(self):
return self.name class Author(Base):#作者
__tablename__ = 'authors'
id = Column(Integer, primary_key=True)
name = Column(String(32)) def __repr__(self):
return self.name # 用户 密码 主机 库
engine = create_engine("mysql+pymysql://root:root@127.0.0.1:3306/test?charset=utf8",encoding="utf-8",echo=False) Base.metadata.create_all(engine)#创建表结构

orm_s_aut.py

 #!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
#python
#2017/7/7 14:38
#__author__='Administrator' from day66 import orm_s
from sqlalchemy.orm import relationship,sessionmaker
Session_class = sessionmaker(bind=orm_s.engine) #创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
s = Session_class() #生成session实例
'''
#book名
b1 = orm_s.Book(name="跟Alex学Python")
b2 = orm_s.Book(name="跟Alex学把妹")
b3 = orm_s.Book(name="跟Alex学装逼")
b4 = orm_s.Book(name="跟Alex学开车") #作者名
a1 = orm_s.Author(name="Alex")
a2 = orm_s.Author(name="Jack")
a3 = orm_s.Author(name="Rain") #关联关系
b1.authors = [a1,a2]
b2.authors = [a1,a2,a3] s.add_all([b1,b2,b3,b4,a1,a2,a3])
''' '''
#查询 作者表 条件 作者名==alex
aut_obj=s.query(orm_s.Author).filter(orm_s.Author.name=='Alex').first()#返回一个对象
print(aut_obj,aut_obj.books,aut_obj.books[0])
''' #更新
s.query(orm_s.Book).filter(orm_s.Book.id ==2).update({"pub_date" : "2017-06-07"}) #查询 书表 条件 书id==2
book_obj=s.query(orm_s.Book).filter(orm_s.Book.id==2).first()
book_obj2=s.query(orm_s.Book).filter(orm_s.Book.id==1).first()
print(book_obj.authors,book_obj)#输出书的作者 书名
#book_obj.authors.remove(aut_obj)#删除书中的一个作者
print(book_obj2.authors,book_obj2)#输出书的作者 书名 #删除作者,会把这个作者跟所有书的关联关系数据也自动删除
'''
s.delete(aut_obj)
'''
book_obj=s.query(orm_s.Book).filter(orm_s.Book.id==2).first()
book_obj2=s.query(orm_s.Book).filter(orm_s.Book.id==1).first()
print(book_obj.authors,book_obj)#输出书的作者 书名
print(book_obj2.authors,book_obj2)#输出书的作者 书名 s.commit()

python第六十六天--sqlalchemy的更多相关文章

  1. 孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

    孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongo ...

  2. 孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解

    孤荷凌寒自学python第八十六天对selenium模块进行较详细的了解 (今天由于文中所阐述的原因没有进行屏幕录屏,见谅) 为了能够使用selenium模块进行真正的操作,今天主要大范围搜索资料进行 ...

  3. 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6

    孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...

  4. 孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2

    孤荷凌寒自学python第六十九天学习并实践beautifulsoup对象用法2 (完整学习过程屏幕记录视频地址在文末) 今天继续学习beautifulsoup对象的属性与方法等内容. 一.今天进一步 ...

  5. 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

    孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...

  6. 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3

    孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...

  7. 孤荷凌寒自学python第六十天在windows10上搭建本地Mongodb数据服务

     孤荷凌寒自学python第六十天在windows10上找搭建本地Mongodb数据服务 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第六天.成功在本地搭建了windows ...

  8. 孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

    孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二 ...

  9. 孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类尝试第一天

     孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类,尝试第一天 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 按上一天的规划,这是根据过去我自学其它编程语 ...

随机推荐

  1. Xamarin.Android 无法检索到 Resource 问题

    错误提示:当前上下文中不存在名称"Resource" 解决方法: 1.看是否有其他错误,如果有其他错误优先解决.(其他错误导致无法感知到Resource) 2.重新生成解决方案.( ...

  2. 为什么我们喜欢用 sigmoid 这类 S 型非线性变换?

    本文整理自 @老师木 的一条图片新浪微博,从另一个角度给出为何采用 sigmoid 函数作非线性变换的解释. 为什么我们喜欢用 sigmoid 这类 S 型非线性变换?

  3. Linux学习笔记之三————Linux命令概述

    一.引言 很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务. Linux 刚出世时没有什么图形界面,所有的操作全靠命令完成, ...

  4. #5 Python变量与输入输出

    前言 学习一门编程语言,最基本的无非不过学习其变量规则.条件语句.循环语句和函数,接下来的几节将开始记录这些基本的语法,本节主要记录变量规则! 一.Python输入输出 在说Python变量之前,先补 ...

  5. netty源码解解析(4.0)-9 ChannelPipleline的默认实现-链表管理

    io.netty.channel.DefaultChannelPipeline implements ChannelPipleline   DefaultChannelPiple给出了ChannelP ...

  6. [转]Angular CLI 安装和使用

    本文转自:https://www.jianshu.com/p/327d88284abb 一. 背景介绍: 两个概念: 关于Angular版本,Angular官方已经统一命名Angular 1.x统称为 ...

  7. VirtualBox安装CentOS7

    一:.下载CentOS7的镜像 下载地址:https://www.centos.org/download/ 进入后有三个版本可以选择: 1.DVD ISO  标准安装版,一般下载这个就可以了(推荐)本 ...

  8. fllume 入门

    flume flume 简介及核心概念 什么是flume Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,目前是Apache的顶级项目.Flume支持 ...

  9. 使用Java打印字符串表格(中英文内容不乱)

    最近在学习使用java来编写cli应用,但是在信息展示上碰到了难题.原因是没有很好工具来展示一个由字符串组成的表格.在git上搜到阿里巴巴有一个叫做 text-ui 的开源项目可以用,但是这个工具在制 ...

  10. java_完数

    题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序,读入两个正整数n和 ...