sqlalchemy(二)简单的连接示例
- # -*- coding: utf-8 -*-
- import sqlalchemy
- from sqlalchemy import create_engine
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String
- from sqlalchemy.orm import sessionmaker
- engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan')
- Base = declarative_base() # 生成orm基类
- class User(Base): #进行映射,创建表结构,models ,三项,id name password
- __tablename__ = 'user' # 表名
- id = Column(Integer, primary_key=True)
- name = Column(String(32))
- password = Column(String(64))
- Base.metadata.create_all(engine) # 创建表结构
- Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
- Session = Session_class() # 生成session实例
- # Session.close()#关闭连接 这个放最后
- # 插入开始
- print('插入开始')
- user_obj = User(name="jack", password="jack") # 生成你要创建的数据对象
- print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None
- Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建
- print(user_obj.name, user_obj.id) # 此时也依然还没创建
- Session.commit() # 现此才统一提交,创建数据
- print('提交数据')
- print(user_obj.name, user_obj.id) # 提交过,就会放在数据库里了。
- # 插入结束
- print('插入结束')
- # 查询开始
- print('查询开始')
- my_user = Session.query(User).filter_by(name="jack").first() # 查找name=jack的
- print(my_user) # 这查出来是个对象
- print(my_user.id, my_user.name, my_user.password)
- # 查询结束
- print('查询结束')
- # 删除开始
- print('删除开始')
- # 先插入一个,可以删的。
- user_obj = User(name="rose", password="jack")
- Session.add(user_obj)
- Session.commit()
- # 查找到需要删的对象
- del_user = Session.query(User).filter_by(name="rose").first()
- print(del_user.name)
- Session.delete(del_user) # 删除命令
- Session.commit() # 提交删除
- find_user = Session.query(User).all()#查询表的全部内容
- for i in find_user:
- print(i.id, i.name)
- # 删除结束
- # 修改开始
- print('修改开始')
- my_user = Session.query(User).filter_by(name="jack").first() # 找到第一条名字是jack的,生成对象。
- my_user.name = "jackadam" # 给对象变量命名
- temp_id = my_user.id # 把这个对象的ID,赋值给临时变量temp_id
- Session.commit() # 提交修改
- my_user2 = Session.query(User).filter_by(id=temp_id).first() # 根据临时变量id,重新查询一下名字是否修改。
- print(my_user2.name)
- # 修改结束
- print('修改结束')
- # 多条件查询
- objs = Session.query(User).filter(User.id > 0).filter(User.id < 7).all()
- # 多条件查询
- # 统计
- print('统计')
- count_num = Session.query(User).filter(User.name.like("ja%")).count()
- print(count_num)
- # 统计
- # 分组
- print('分组')
- from sqlalchemy import func
- print(Session.query(func.count(User.name), User.name).group_by(User.name).all())
- # 分组
- Session.close()#最后不忘close
- '''
- orady_by
- desc 升序
- asc 降序
- '''
注释很详细了,不写了
- from sqlalchemy import create_engine
- from sqlalchemy.orm import scoped_session, sessionmaker
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String
- engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan', convert_unicode=True)
- db_session = scoped_session(sessionmaker(autocommit=False,
- autoflush=False,
- bind=engine))
- Base = declarative_base()
- Base.query = db_session.query_property()
- class User(Base):
- __tablename__ = 'users'
- id = Column(Integer, primary_key=True)
- name = Column(String(50))
- email = Column(String(120))
- def __init__(self, name=None, email=None):
- self.name = name
- self.email = email
- def __repr__(self):
- return '<User %r>' % (self.name)
- def init_db():
- # 在这里导入所有的可能与定义模型有关的模块,这样他们才会合适地
- # 在 metadata 中注册。否则,您将不得不在第一次执行 init_db() 时
- # 先导入他们。
- Base.metadata.create_all(bind=engine)
- if __name__ == '__main__':
- init_db()
- print('C,创建数据')
- new_user=User(name= 'rose',email='rose@163.com')
- db_session.add(new_user)
- db_session.commit()
- db_session.remove()
- print('R,读取数据')
- new_user = User(name='jack', email='jack@163.com')
- db_session.add(new_user)
- db_session.commit()
- db_session.remove()
- msg=User.query.filter_by(name='jack').first()
- print(msg.email)
- print('U,更新数据')
- tag_user=User.query.filter_by(name='jack').first()
- tag_user.email='jack@hotmail.com'
- db_session.commit()
- db_session.remove()
- tag=User.query.filter_by(name='jack').first()
- print(tag.email)
- print('D,删除数据')
- del_user=User.query.filter_by(name='jack').first()
- db_session.delete(del_user)
- db_session.commit()
- db_session.remove()
另一种简单的连接示例,http://docs.pythontab.com/flask/flask0.10/patterns/sqlalchemy.html
从flask使用sqlalchemy文档中学到的。
看了几个别人的代码,也是这样写的,用映射的类名来查询,不使用session。
sqlalchemy(二)简单的连接示例的更多相关文章
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- unity Dotween插件的简单介绍及示例代码
unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...
- Skinned Mesh原理解析和一个最简单的实现示例
Skinned Mesh 原理解析和一个最简单的实现示例 作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...
- Python正则表达式的简单应用和示例演示
前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看.今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则 ...
- sqlalchemy(二)高级用法
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
- [MySQL5.6] 一个简单的optimizer_trace示例
[MySQL5.6] 一个简单的optimizer_trace示例 前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...
- 百度APP移动端网络深度优化实践分享(二):网络连接优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...
- wstngfw openVpn站点到站点连接示例(SSL/TLS)
wstngfw openVpn站点到站点连接示例(SSL/TLS) 在本例中,将假设以下设置: 站点 A 站点 B 名称 Beijing Office(北京办公室) 名称 Shenzheng Offi ...
- wstngfw openVpn站点到站点连接示例(共享密钥)
wstngfw openVpn站点到站点连接示例(共享密钥) 在本例中,将假设以下设置: 站点 A 站点 B 名称 Beijing Office(北京办公室) 名称 Shenzheng Office( ...
随机推荐
- 单调队列 Monotonic Queue / 单调栈 Monotonic Stack
2018-11-16 22:45:48 一.单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者 ...
- Notepad++安装json插件
安装 : 1.下载插件压缩包并解压出dll:NPPJSONViewer.dll(64位) 下载地址:https://pan.baidu.com/s/1JeBzrovb-GHRo14vO-AnJA 提 ...
- Ubuntu终端多窗口分屏Terminator
1.安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator 2.快捷键 Ctrl+Shift+E 垂直分割窗口 Ct ...
- boke例子: freermarker:在使用ajax传递json数据的时候多出冒号
boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...
- Python的特殊成员
Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...
- JS过渡和变形效果演示(举例:鼠标滑过图片放大) --JS案例
1.代码: <!DOCTYPE html><html><head> <meta charset="utf-8"> <title ...
- ncnn框架
1.下载和编译ncnn git clone https://github.com/Tencent/ncnn cd ncnn mkdir build && cd build cmake ...
- Fiddler抓包—搞定接口测试
·包的定义 在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接受者的地址信息.这些包然后沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合. ·应用 简 ...
- php文件处理函数
//basename的使用$path='test/abc.jpg'; echo basename($path);// echo '<br/>'; echo basename($path,' ...
- 路由器固定IP配置
前言 路由器插入好电源,插入好网线,笔记本连接路由器的wifi,连接成功后,网页自动打开. 1.在网页自动输入管理员密码 2.上网方式选择固定IP地址,输入IP地址,子网掩码,默认网关,DNS服务 3 ...