循序渐进Python3(十)-- 2 -- SqlAlchemy
-
ORM
SqlAlchemy ORM
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
简单操作:
#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = '无名小妖'
from sqlalchemy import create_engine
# pymysql://root:123456@192.168.168.231:3306/test
# 连接数据库的模块://用户名:密码@ip:端口/数据库
engine = create_engine("mysql+pymysql://root:123456@192.168.168.231:3306/test", max_overflow=5)
engine.execute(
"INSERT INTO hosts VALUES ('2', 'v1')"
)
engine.execute(
"INSERT INTO hosts VALUES (%s, %s)",
((555, "v1"), (666, "v1"),)
)
engine.execute(
"INSERT INTO hosts VALUES (%(id)s, %(name)s)",
id=999, name="v1"
)
result = engine.execute('select * from hosts')
ret = result.fetchall()
print(ret)
创建表
#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = '无名小妖'
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:123456@192.168.168.231:3306/test", max_overflow=5)
metadata.create_all(engine) # 创建上面定义的表
engine.execute(
"INSERT INTO color VALUES (%(id)s, %(name)s)",
id=999, name="alex"
)
result = engine.execute('select * from color')
ret = result.fetchall()
print(ret)
#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = '无名小妖'
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey, select
engine = create_engine("mysql+pymysql://root:123456@192.168.168.231:3306/test", max_overflow=5)
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)),
)
conn = engine.connect()
# 创建SQL语句,INSERT INTO "user" (id, name) VALUES (:id, :name)
# conn.execute(user.insert(), {'id': 7, 'name': 'seven'})
# 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, ])
ret = conn.execute(sql)
print(ret)
# 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
# Version = 3.5.2
# author = '无名小妖'
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
Base = declarative_base() # 生成一个SqlORM 基类
engine = create_engine("mysql+mysqldb://root@localhost:3306/test", echo=False)
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 class ,注意,这里返回给session的是个class,不是实例
session = SessionCls()
# h1 = Host(hostname='localhost',ip_addr='127.0.0.1')
# h2 = Host(hostname='ubuntu',ip_addr='192.168.2.243',port=20000)
# h3 = Host(hostname='ubuntu2',ip_addr='192.168.2.244',port=20000)
# session.add(h3) #可以一个一个添加
# session.add_all( [h1,h2]) # 也可以全部添加
# h2.hostname = 'ubuntu_test' #只要没提交,此时修改也没问题
# 想要修改需得先查询
# res = session.query(Host).filter(Host.hostname.in_(['ubuntu2', 'localhost'])).all() # all查出所有
# print(res)
# obj = session.query(Host).filter(Host.hostname=='localhost').first() # first查出第一条
# print(obj)
# obj.hostname = 'test data'
# 删除数据
# session.delete(obj)
# session.rollback() # 回滚
# session.commit() # 提交
循序渐进Python3(十)-- 2 -- SqlAlchemy的更多相关文章
- Python3.x:SQLAlchemy操作数据库
Python3.x:SQLAlchemy操作数据库 前言 SQLAlchemy是一个ORM框架(Object Rational Mapping,对象关系映射),它可以帮助我们更加优雅.更加高效的实现数 ...
- 循序渐进Python3(十)-- 3 -- SqlAlchemy
使用sqlalchemy 创建外键关联 ), ), ) host_user = Column(String(), ), ), ]).first()for item in works.workinfo: ...
- 循序渐进Python3(十二) --2-- web框架之django简单实现oracle数据库操作
在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接. 产能在软 ...
- 循序渐进Python3(十二) --0-- web之框架
web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf ...
- 循序渐进Python3(十二) --1-- web框架之django
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...
- 循序渐进Python3(十)-- 1 -- pymysql
使用pymsql 模块操作数据库 #!/usr/bin/env python , ),()]), user='root', passwd='123456', db='test')# 创建游标curso ...
- 循序渐进Python3(十)-- 4 -- paramiko
paramiko模块,基于SSH用于连接远程服务器并执行相关操作. 使用 (1)SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: , ))transport.connect( ...
- 循序渐进Python3(十)-- 0 -- RabbitMQ
RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息 ...
- 循序渐进Python3(十一) --5-- 同源策略
一.什么是同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能.它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript ...
随机推荐
- EF执行SQL
1.EntityFramework 执行SQL语句进行参数化查询代码示例 参考:http://blog.csdn.net/chz_cslg/article/details/49002093
- Axure 使用心得总结
Axure的本意是高效快捷的完成原型制作,能够清晰的说明功能,交互就是好的,"够漂亮"就行,不需要做到很完美,至于完美还是交给专业的UI吧. 一些心得记录下来: 1.下载一些常用的 ...
- Dictionary的几种遍历方法
Dictionary<string, int> list = new Dictionary<string, int>(); list.Add("d", 1) ...
- 开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供)
天气预报一直是各大网站的一个基本功能,最近小编也想在网站上弄一个,得瑟一下,在网络搜索了很久,终于找到了开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供),具体如下: 国家气象局提供的 ...
- windows下CMake使用图文手册 Part 2
例子2:有目录的项目 我现在有个文件夹ProjectDate,有如下文件结构 E:. │ CMakeLists.txt │ ├─include │ Date.h │ └─src ...
- 升级到VS2013.Update.4的问题
升级到VS2013.Update.4后,编译VS2010的解决方案出错,提示AxImp.exe找不到,到网上搜索后,没有找到能用的法子: 修复VS2013后也无法解决: 折腾2个小时后终于找到问题了: ...
- Oracle 作业设置完不执行解决
在日常的工作当中,已经几次遇到Oracle数据库 建立了新的作业但是不执行的问题.写下来给大家分享一下. 我们日常在 dbms_job这个包建立了相关作业,但是到点也不会执行,在百度上看了一下 并且给 ...
- Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法
11g里面用listagg: select listagg(name,',') within (order by id) from table 10g里面用wm_concat:select wm_co ...
- Github上传自己的工程
1.注册并新建项目 2.配置github for windows 前题:安装相应的github for windows 2.1 获取密钥 可以用命令的模式(Git bash),参考资料中有相应的用法: ...
- 迁移学习( Transfer Learning )
在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型:然后利用这个学习到的模型来对测试文档进行分类与预测.然而,我们看到机器学习算法在当前的Web挖掘研究中存在着一个关 ...