python学习之day11
目录
SqlAlchemy
外键
SqlAlechemy
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
- MySQL-Python
- mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
- pymysql
- mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
- MySQL-Connector
- mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
- cx_Oracle
- oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
- 更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html
创建表(实例方法)
- from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
- metadata = MetaData()
- user = Table('user', metadata,
- Column('id', Integer, primary_key=True),
- Column('name', String(20)),
- )
- color = Table('color', metadata,
- Column('id', Integer, primary_key=True),
- Column('name', String(20)),
- ) #表结构
- engine = create_engine("mysql+pymysql://root:1234@127.0.0.1:3306/mydb?charset=utf8", max_overflow=5)#链接数据库
- metadata.create_all(engine)
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
- metadata = MetaData()
- user = Table('user', metadata,
- Column('id', Integer, primary_key=True),
- Column('name', String(20)),
- )
- color = Table('color', metadata,
- Column('id', Integer, primary_key=True),
- Column('name', String(20)),
- )
- engine = create_engine("mysql+mysqldb://root:123@127.0.0.1:3306/s11", max_overflow=5)
- conn = engine.connect()
- # 创建SQL语句,INSERT INTO "user" (id, name) VALUES (:id, :name)
- conn.execute(user.insert(),{'id':7,'name':'seven'})
- conn.close()
- # sql = user.insert().values(id=123, name='wu')
- # conn.execute(sql)
- # conn.close()
- # sql = user.delete().where(user.c.id > 1)
- # sql = user.update().values(fullname=user.c.name)
- # sql = user.update().where(user.c.name == 'jack').values(name='ed')
- # sql = select([user, ])
- # sql = select([user.c.id, ])
- # sql = select([user.c.name, color.c.name]).where(user.c.id==color.c.id)
- # sql = select([user.c.name]).order_by(user.c.name)
- # sql = select([user]).group_by(user.c.name)
- # result = conn.execute(sql)
- # print result.fetchall()
- # conn.close()
增删改查
创建表(类方法)
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column,Integer,String
- from sqlalchemy.orm import sessionmaker
- from sqlalchemy import create_engine,and_,or_
- Base = declarative_base() #生成一个SqlORM的基类
- engine = create_engine("mysql+mysqldb://root:123@127.0.0.1:3306/s12",echo=True)
- class Host(Base):
- __tablename__ = 'hosts'
- id = Column(Integer,primary_key=True,autoincrement=True)
- hostname = Column(String(64),unique=True,nullable=False)
- ip_addr = Column(String(128),unique=True,nullable=False)
- port = Column(Integer,default=22)
- Base.metadata.create_all(engine) #创建所有表结构
- if __name__ == '__main__':
- SessionCls = sessionmaker(bind=engine) #创建与数据库的会话
- session = SessionCls() #链接的实例
- # add(添加数据)
- # h2 = Host(hostname='localhost',ip_addr='127.0.0.1')
- # h3 = Host(hostname='ubuntu5',ip_addr='192.168.1.24',port=20000)
- # session.add(h2)
- # session.add(h3)
- # session.add_all([h2,h3])
- # update(修改数据)
- # obj = session.query(Host).filter(Host.hostname=='localhost').first()#查询数据
- # print("++>",obj)
- # obj.hostname = "test server"
- # delete(删除数据)
- # obj = session.query(Host).filter(Host.hostname=='test server').first()
- # session.delete(obj)
- # session.commit()
- # ########## 增 ##########
- # u = User(id=2, name='sb')
- # session.add(u)
- # session.add_all([
- # User(id=3, name='sb'),
- # User(id=4, name='sb')
- # ])
- # session.commit()
- # ########## 删除 ##########
- # session.query(User).filter(User.id > 2).delete()
- # session.commit()
- # ########## 修改 ##########
- # session.query(User).filter(User.id > 2).update({'cluster_id' : 0})
- # session.commit()
- # ########## 查 ##########
- # ret = session.query(User).filter_by(name='sb').first()
- # ret = session.query(User).filter_by(name='sb').all()
- # print ret
- # ret = session.query(User).filter(User.name.in_(['sb','bb'])).all()
- # print ret
- # ret = session.query(User.name.label('name_label')).all()
- # print ret,type(ret)
- # ret = session.query(User).order_by(User.id).all()
- # print ret
- # ret = session.query(User).order_by(User.id)[1:3]
- # print ret
- # session.commit()
增删改查
外键——一对多
python学习之day11的更多相关文章
- Python学习路程day11
SqlAlchemy ORM SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据A ...
- 【坚持】Selenium+Python学习记录 DAY11
2018/06/1-2018/06/4 参考资料: [菜鸟教程](http://www.runoob.com/python3/python3-examples.html) [Python解惑:True ...
- Python学习笔记 - day11 - Python操作数据库
MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...
- 记录我的 python 学习历程-Day11 两个被忽视的坑、补充知识点、函数名的应用、新版格式化输出、迭代器
补充知识点 函数形参中默认参数的陷阱 针对不可变数据类型,它是没有陷阱的 def func(name, sex='男'): print(name) print(sex) func('Dylan') # ...
- 【目录】Python学习笔记
目录:Python学习笔记 目标:坚持每天学习,每周一篇博文 1. Python学习笔记 - day1 - 概述及安装 2.Python学习笔记 - day2 - PyCharm的基本使用 3.Pyt ...
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
随机推荐
- dataGridView行高自适应
今天从网上查询相关datagridview行高自适应的信息时,好多都是告诉你直接用下面三行代码: dataGridView1.AutoSizeRowsMode = DataGridViewAutoSi ...
- Git学习05 --分支管理02
1.冲突 产生冲突后,查看readme.txt 可以看到冲突内容 <<<<<<< ======= >>>>>>> ...
- CentOS6.4x64安装mysql5.6.23(rpm)
#查看已安装的的mysql shell>rpm -qa|grep -i mysql #根据上条命令的结果卸载mysql shell>rpm -e -nodeps mysql* #下载mys ...
- org.quartz.impl.jdbcjobstore.LockException
说明:在使用Tomcat6.0.32+Spring3.05+Quartz1.8.6+Mysql5.5.9 此项目在我本机上没有问题,当我把mysql 脚本导入到服务器上,将数据源配置修改为服务器对应的 ...
- QT---线程间通信(要先编译libqt-mt.so?)
在 Qt 系统中,运行着一个GUI 主事件线程,这个主线程从窗口系统中获取事件,并将它们分发到各个组件去处理.在 QThread 类中有一种从非主事件线程中将事件提交给一个对象的方法,也就是 QThr ...
- 【转】Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法
原文网址:http://www.cnblogs.com/muyun/p/3370996.html 一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install ...
- 【HDU 5510 Bazinga】字符串
2015沈阳区域赛现场赛第2题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:给定一个由字符串组成的序列,一共n个元素,每个元素是一个不 ...
- ALSA音频工具amixer,aplay,arecord
ALSA音频工具编译安装 ========================================================================1.官网http://www. ...
- Python 单词字母顺序不变且所有倒排
翻出google測试project师的一道题目: 设计一个函数,不论什么语言都能够,实现下面功能: 一个句子,将句子中的单词所有倒排过来,但单词的字母顺序不变.eg. this is a real ...
- wso2esb源码编译总结
最近花了两周的空闲时间帮朋友把wso2esb的4.0.3.4.6.0.4.7.0三个版本从源码编译出来了.以下是大概的一些体会. wso2esb是基于carbon的.carbon是个基于eclipse ...