#!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. Koa 框架教程

    Koa 框架教程   作者: 阮一峰 日期: 2017年8月 9日 Node 主要用在开发 Web 应用.这决定了使用 Node,往往离不开 Web 应用框架. Koa 就是一种简单好用的 Web 框 ...

  2. python之PIL模块基础功能

    Image主要是打开图片后,对图片进行编辑,主要有以下一些常用功能: 1.读取并显示图片: from PIL import Image img = Image.open("H:\\salar ...

  3. C# DataGridview控件自动下拉到最后一行

    有时候使用DataGridView难免会在最后插入一条数据,如果插入的数据超过滚动条显示的行数,那么默认情况下不会显示到最后一行.增加以下代码一直将滚动条拉倒最低. ;

  4. DevExpress GridView自动滚动

    引言 最新有一个winform项目使用的是DevExpress的控件,所以最近都在摸索使用这套控件,实在是佩服整套控件的强大,同时代码写起来也简洁.客户有一个需求,希望报表结果能在外接的大屏幕上定时滚 ...

  5. SpringBoot一站式启动流程源码分析

    一.前言 由上篇文章我们得知,SpringBoot启动时,就是有很简单的一行代码.那我们可以很清楚的看到这行代码的主角便是SpringApplication了,本文我们就来聊一聊这货,来探寻Sprin ...

  6. 从零开始学 Web 之 ES6(四)ES6基础语法二

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  7. NIO ServerSocketChannel ScoketChannel

    package com.yb.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.net.S ...

  8. git第十节--git hub

    github 是一个开源的协作社区 github 插件octtree 为别人的仓库做贡献 fork 别人仓库内容到自己的个人仓库 git clone 到本地进行开发push 到个人仓库 提PR(pul ...

  9. IP白名单添加了当前IP,获取access_token时依然报出错误码40164的坑

    开发公众号网页时,想要调用微信API接口,令人无奈的是,想要调用各接口都需使用access_token,于是,获取access_token的征途开始了…… 1.开发者基本配置 (1) 公众平台官网登录 ...

  10. [转]ionic3 实现android版本打包

    本文转自:https://blog.csdn.net/weixin_39461487/article/details/79387250?utm_source=blogxgwz0 版权声明:本文为博主原 ...