1. # -*- coding: utf-8 -*-
  2. import sqlalchemy
  3. from sqlalchemy import create_engine
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy import Column, Integer, String
  6. from sqlalchemy.orm import sessionmaker
  7.  
  8. engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan')
  9.  
  10. Base = declarative_base() # 生成orm基类
  11.  
  12. class User(Base): #进行映射,创建表结构,models ,三项,id name password
  13. __tablename__ = 'user' # 表名
  14. id = Column(Integer, primary_key=True)
  15. name = Column(String(32))
  16. password = Column(String(64))
  17.  
  18. Base.metadata.create_all(engine) # 创建表结构
  19. Session_class = sessionmaker(bind=engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
  20. Session = Session_class() # 生成session实例
  21. # Session.close()#关闭连接 这个放最后
  22.  
  23. # 插入开始
  24. print('插入开始')
  25. user_obj = User(name="jack", password="jack") # 生成你要创建的数据对象
  26. print(user_obj.name, user_obj.id) # 此时还没创建对象呢,不信你打印一下id发现还是None
  27.  
  28. Session.add(user_obj) # 把要创建的数据对象添加到这个session里, 一会统一创建
  29. print(user_obj.name, user_obj.id) # 此时也依然还没创建
  30.  
  31. Session.commit() # 现此才统一提交,创建数据
  32. print('提交数据')
  33. print(user_obj.name, user_obj.id) # 提交过,就会放在数据库里了。
  34. # 插入结束
  35. print('插入结束')
  36.  
  37. # 查询开始
  38. print('查询开始')
  39. my_user = Session.query(User).filter_by(name="jack").first() # 查找name=jack的
  40. print(my_user) # 这查出来是个对象
  41. print(my_user.id, my_user.name, my_user.password)
  42. # 查询结束
  43. print('查询结束')
  44.  
  45. # 删除开始
  46. print('删除开始')
  47. # 先插入一个,可以删的。
  48. user_obj = User(name="rose", password="jack")
  49. Session.add(user_obj)
  50. Session.commit()
  51. # 查找到需要删的对象
  52. del_user = Session.query(User).filter_by(name="rose").first()
  53. print(del_user.name)
  54. Session.delete(del_user) # 删除命令
  55. Session.commit() # 提交删除
  56. find_user = Session.query(User).all()#查询表的全部内容
  57. for i in find_user:
  58. print(i.id, i.name)
  59. # 删除结束
  60.  
  61. # 修改开始
  62. print('修改开始')
  63. my_user = Session.query(User).filter_by(name="jack").first() # 找到第一条名字是jack的,生成对象。
  64. my_user.name = "jackadam" # 给对象变量命名
  65. temp_id = my_user.id # 把这个对象的ID,赋值给临时变量temp_id
  66. Session.commit() # 提交修改
  67. my_user2 = Session.query(User).filter_by(id=temp_id).first() # 根据临时变量id,重新查询一下名字是否修改。
  68. print(my_user2.name)
  69. # 修改结束
  70. print('修改结束')
  71. # 多条件查询
  72. objs = Session.query(User).filter(User.id > 0).filter(User.id < 7).all()
  73. # 多条件查询
  74.  
  75. # 统计
  76. print('统计')
  77. count_num = Session.query(User).filter(User.name.like("ja%")).count()
  78. print(count_num)
  79.  
  80. # 统计
  81.  
  82. # 分组
  83. print('分组')
  84. from sqlalchemy import func
  85.  
  86. print(Session.query(func.count(User.name), User.name).group_by(User.name).all())
  87. # 分组
  88. Session.close()#最后不忘close
  89.  
  90. '''
  91. orady_by
  92. desc 升序
  93. asc 降序
  94. '''

注释很详细了,不写了

  1. from sqlalchemy import create_engine
  2. from sqlalchemy.orm import scoped_session, sessionmaker
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy import Column, Integer, String
  5.  
  6. engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan', convert_unicode=True)
  7. db_session = scoped_session(sessionmaker(autocommit=False,
  8. autoflush=False,
  9. bind=engine))
  10. Base = declarative_base()
  11. Base.query = db_session.query_property()
  12.  
  13. class User(Base):
  14. __tablename__ = 'users'
  15. id = Column(Integer, primary_key=True)
  16. name = Column(String(50))
  17. email = Column(String(120))
  18.  
  19. def __init__(self, name=None, email=None):
  20. self.name = name
  21. self.email = email
  22.  
  23. def __repr__(self):
  24. return '<User %r>' % (self.name)
  25.  
  26. def init_db():
  27. # 在这里导入所有的可能与定义模型有关的模块,这样他们才会合适地
  28. # 在 metadata 中注册。否则,您将不得不在第一次执行 init_db() 时
  29. # 先导入他们。
  30.  
  31. Base.metadata.create_all(bind=engine)
  32.  
  33. if __name__ == '__main__':
  34. init_db()
  35. print('C,创建数据')
  36. new_user=User(name= 'rose',email='rose@163.com')
  37. db_session.add(new_user)
  38. db_session.commit()
  39. db_session.remove()
  40. print('R,读取数据')
  41. new_user = User(name='jack', email='jack@163.com')
  42. db_session.add(new_user)
  43. db_session.commit()
  44. db_session.remove()
  45. msg=User.query.filter_by(name='jack').first()
  46. print(msg.email)
  47. print('U,更新数据')
  48. tag_user=User.query.filter_by(name='jack').first()
  49. tag_user.email='jack@hotmail.com'
  50. db_session.commit()
  51. db_session.remove()
  52. tag=User.query.filter_by(name='jack').first()
  53. print(tag.email)
  54. print('D,删除数据')
  55. del_user=User.query.filter_by(name='jack').first()
  56. db_session.delete(del_user)
  57. db_session.commit()
  58. db_session.remove()

另一种简单的连接示例,http://docs.pythontab.com/flask/flask0.10/patterns/sqlalchemy.html

从flask使用sqlalchemy文档中学到的。

看了几个别人的代码,也是这样写的,用映射的类名来查询,不使用session。

sqlalchemy(二)简单的连接示例的更多相关文章

  1. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  2. unity Dotween插件的简单介绍及示例代码

    unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...

  3. Skinned Mesh原理解析和一个最简单的实现示例

    Skinned Mesh 原理解析和一个最简单的实现示例   作者:n5 Email: happyfirecn##yahoo.com.cn Blog: http://blog.csdn.net/n5 ...

  4. Python正则表达式的简单应用和示例演示

    前一阵子小编给大家连续分享了十篇关于Python正则表达式基础的文章,感兴趣的小伙伴可以点击链接进去查看.今天小编给大家分享的是Python正则表达式的简单应用和示例演示,将前面学习的Python正则 ...

  5. sqlalchemy(二)高级用法

    sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...

  6. [MySQL5.6] 一个简单的optimizer_trace示例

    [MySQL5.6] 一个简单的optimizer_trace示例   前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...

  7. 百度APP移动端网络深度优化实践分享(二):网络连接优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<二>连接优化>,感谢原作者的无私分享. 一.前言 在<百度APP移动端网 ...

  8. wstngfw openVpn站点到站点连接示例(SSL/TLS)

    wstngfw openVpn站点到站点连接示例(SSL/TLS) 在本例中,将假设以下设置: 站点 A 站点 B 名称 Beijing Office(北京办公室) 名称 Shenzheng Offi ...

  9. wstngfw openVpn站点到站点连接示例(共享密钥)

    wstngfw openVpn站点到站点连接示例(共享密钥) 在本例中,将假设以下设置: 站点 A 站点 B 名称 Beijing Office(北京办公室) 名称 Shenzheng Office( ...

随机推荐

  1. 单调队列 Monotonic Queue / 单调栈 Monotonic Stack

    2018-11-16 22:45:48 一.单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者 ...

  2. Notepad++安装json插件

    安装  : 1.下载插件压缩包并解压出dll:NPPJSONViewer.dll(64位) 下载地址:https://pan.baidu.com/s/1JeBzrovb-GHRo14vO-AnJA 提 ...

  3. Ubuntu终端多窗口分屏Terminator

    1.安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator 2.快捷键 Ctrl+Shift+E    垂直分割窗口 Ct ...

  4. boke例子: freermarker:在使用ajax传递json数据的时候多出冒号

    boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...

  5. Python的特殊成员

    Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用’from module import *’导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...

  6. JS过渡和变形效果演示(举例:鼠标滑过图片放大) --JS案例

    1.代码: <!DOCTYPE html><html><head> <meta charset="utf-8"> <title ...

  7. ncnn框架

    1.下载和编译ncnn git clone https://github.com/Tencent/ncnn cd ncnn mkdir build && cd build cmake ...

  8. Fiddler抓包—搞定接口测试

    ·包的定义   在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接受者的地址信息.这些包然后沿着不同的路径在一个或多个网络中传输,并且在目的地重新组合.   ·应用   简 ...

  9. php文件处理函数

    //basename的使用$path='test/abc.jpg'; echo basename($path);// echo '<br/>'; echo basename($path,' ...

  10. 路由器固定IP配置

    前言 路由器插入好电源,插入好网线,笔记本连接路由器的wifi,连接成功后,网页自动打开. 1.在网页自动输入管理员密码 2.上网方式选择固定IP地址,输入IP地址,子网掩码,默认网关,DNS服务 3 ...