用前安装

pip3 install sqlalchemy

ORM

ORM就是运用面向对象的知识,将数据库中的每个表对应一个类,将数据库表中的记录对应一个类的对象。将复杂的sql语句转换成类和对象的操作。

执行源生SQL

  1. import time
  2. import threading
  3. import sqlalchemy
  4. from sqlalchemy import create_engine
  5. from sqlalchemy.engine.base import Engine
  6.  
  7. engine = create_engine(
  8. "mysql+pymysql://root:123@47.93.4.198:3306/s6?charset=utf8",
  9. max_overflow=0, # 超过连接池大小外最多创建的连接
  10. pool_size=5, # 连接池大小
  11. pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
  12. pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
  13. )
  14. from sqlalchemy.pool import _ConnectionFairy
  15. def task(arg):
  16. conn = engine.raw_connection()
  17. print('你到了',conn.connection)
  18. cursor = conn.cursor()
  19. cursor.execute(
  20. "select * from users"
  21. )
  22. result = cursor.fetchall()
  23. import time
  24. time.sleep(5)
  25. cursor.close()
  26. conn.close()
  27. for i in range(20):
  28. t = threading.Thread(target=task, args=(i,))
  29. t.start()

注意: 查看连接 show status like 'Threads%'; 

ORM表操作

一创建数据库表

  1. import datetime
  2. from sqlalchemy import create_engine
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index
  5.  
  6. Base = declarative_base()
  7.  
  8. class Users(Base):
  9. __tablename__ = 'users'
  10.  
  11. id = Column(Integer, primary_key=True)
  12. name = Column(String(32), index=True, nullable=False)
  13. # email = Column(String(32), unique=True)
  14. # ctime = Column(DateTime, default=datetime.datetime.now)
  15. # extra = Column(Text, nullable=True)
  16.  
  17. __table_args__ = (
  18. # UniqueConstraint('id', 'name', name='uix_id_name'),
  19. # Index('ix_id_name', 'name', 'email'),
  20. )
  21.  
  22. def init_db():
  23. """
  24. 根据类创建数据库表
  25. :return:
  26. """
  27. engine = create_engine(
  28. "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
  29. max_overflow=0, # 超过连接池大小外最多创建的连接
  30. pool_size=5, # 连接池大小
  31. pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
  32. pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
  33. )
  34.  
  35. Base.metadata.create_all(engine)
  36.  
  37. def drop_db():
  38. """
  39. 根据类删除数据库表
  40. :return:
  41. """
  42. engine = create_engine(
  43. "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
  44. max_overflow=0, # 超过连接池大小外最多创建的连接
  45. pool_size=5, # 连接池大小
  46. pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
  47. pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
  48. )
  49.  
  50. Base.metadata.drop_all(engine)
  51.  
  52. if __name__ == '__main__':
  53. drop_db()
  54. init_db()

二含FK与M2M的表

  1. import datetime
  2. from sqlalchemy import create_engine
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index
  5. from sqlalchemy.orm import relationship
  6.  
  7. Base = declarative_base()
  8.  
  9. # ------------ 单表示例 -----------#
  10. class Users(Base):
  11. __tablename__ = 'users'
  12.  
  13. id = Column(Integer, primary_key=True)
  14. name = Column(String(32), index=True)
  15. age = Column(Integer, default=18)
  16. email = Column(String(32), unique=True)
  17. ctime = Column(DateTime, default=datetime.datetime.now)
  18. extra = Column(Text, nullable=True)
  19.  
  20. __table_args__ = (
  21. # UniqueConstraint('id', 'name', name='uix_id_name'),
  22. # Index('ix_id_name', 'name', 'extra'),
  23. )
  24.  
  25. class Hosts(Base):
  26. __tablename__ = 'hosts'
  27.  
  28. id = Column(Integer, primary_key=True)
  29. name = Column(String(32), index=True)
  30. ctime = Column(DateTime, default=datetime.datetime.now)
  31.  
  32. # ##################### 一对多示例 #########################
  33. class Hobby(Base):
  34. __tablename__ = 'hobby'
  35. id = Column(Integer, primary_key=True)
  36. caption = Column(String(50), default='篮球')
  37.  
  38. class Person(Base):
  39. __tablename__ = 'person'
  40. nid = Column(Integer, primary_key=True)
  41. name = Column(String(32), index=True, nullable=True)
  42. hobby_id = Column(Integer, ForeignKey("hobby.id"))
  43.  
  44. # 与生成表结构无关,仅用于查询方便
  45. hobby = relationship("Hobby", backref='pers')
  46.  
  47. # ##################### 多对多示例 #########################
  48.  
  49. class Server2Group(Base):
  50. __tablename__ = 'server2group'
  51. id = Column(Integer, primary_key=True, autoincrement=True)
  52. server_id = Column(Integer, ForeignKey('server.id'))
  53. group_id = Column(Integer, ForeignKey('group.id'))
  54.  
  55. class Group(Base):
  56. __tablename__ = 'group'
  57. id = Column(Integer, primary_key=True)
  58. name = Column(String(64), unique=True, nullable=False)
  59.  
  60. # 与生成表结构无关,仅用于查询方便
  61. servers = relationship('Server', secondary='server2group', backref='groups')
  62.  
  63. class Server(Base):
  64. __tablename__ = 'server'
  65.  
  66. id = Column(Integer, primary_key=True, autoincrement=True)
  67. hostname = Column(String(64), unique=True, nullable=False)
  68.  
  69. def init_db():
  70. """
  71. 根据类创建数据库表
  72. :return:
  73. """
  74. engine = create_engine(
  75. "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
  76. max_overflow=0, # 超过连接池大小外最多创建的连接
  77. pool_size=5, # 连接池大小
  78. pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
  79. pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
  80. )
  81.  
  82. Base.metadata.create_all(engine)
  83.  
  84. def drop_db():
  85. """
  86. 根据类删除数据库表
  87. :return:
  88. """
  89. engine = create_engine(
  90. "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
  91. max_overflow=0, # 超过连接池大小外最多创建的连接
  92. pool_size=5, # 连接池大小
  93. pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
  94. pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
  95. )
  96.  
  97. Base.metadata.drop_all(engine)
  98.  
  99. if __name__ == '__main__':
  100. drop_db()
  101. init_db()

三 操作数据库表

  1. from sqlalchemy.orm import sessionmaker
  2. from sqlalchemy import create_engine
  3. from models import Users
  4.  
  5. engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s6", max_overflow=0, pool_size=5)
  6. Session = sessionmaker(bind=engine)
  7.  
  8. # 每次执行数据库操作时,都需要创建一个session
  9. session = Session()
  10.  
  11. # ############# 执行ORM操作 #############
  12. obj1 = Users(name="alex1")
  13. session.add(obj1)
  14.  
  15. # 提交事务
  16. session.commit()
  17. # 关闭session
  18. session.close()

  

SQLAlchemy基础操作一的更多相关文章

  1. SQLAlchemy基础操作二

    多线程示例 import time import threading from sqlalchemy.ext.declarative import declarative_base from sqla ...

  2. python基础操作以及hdfs操作

    目录 前言 基础操作 hdfs操作 总结 一.前言        作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...

  3. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  4. 【Learning Python】【第二章】Python基础类型和基础操作

    基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...

  5. Emacs学习心得之 基础操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...

  6. Git基础操作

    配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...

  7. activiti基础操作

    package activitiTest; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInp ...

  8. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D基础操作   第一课<G3D编辑器初探> G3D编辑器介绍,依托于一个复杂场景,讲解了场景视图及其基本操作,属性面板和工具栏的 ...

  9. MYSQL 基础操作

    1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...

随机推荐

  1. URI和URL差别以及相对路径和绝对路径的差别

    一.URL和URI定义: 1.URL是全球资源定位符的英文所写,您平时上网时在IE浏览器中输入的那个地址就是URL.比方:网易 http://www.163.com就是一个URL. 2.URI是Web ...

  2. POJ - 1611The Suspects-并查集

    POJ - 1611 The Suspects Time Limit: 1000MS   Memory Limit: 20000KB   64bit IO Format: %I64d & %I ...

  3. JAVA入门[15]-过滤器filter

    一.过滤器 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 参考:http:/ ...

  4. Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

    异常信息 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with na ...

  5. idea的mybatis的xml文件总是报警告SQL dialect is not configured

    警告: No data sources are configured to run this SQL and provide advanced code assistance. Disable thi ...

  6. bzoj 3551: [ONTAK2010]Peaks加强版

    Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个数,第i个数为h_i 接下来M行,每行3个数a b c,表示从a到b有一条困难值为c的双向路径. 接下来 ...

  7. 一口一口吃掉Volley(四)

    欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/02/17/一口一口吃掉Volley(四)/ 非常感谢你能够坚持看到第四篇,同时这也是这个Volley系列教 ...

  8. JS画几何图形之一【直线】

    JS画图的想法经过大脑的时候,觉得有点意思,所以就实践了一番.JS画图为系列文章,本是讲点.线和面 先看样例:http://www.zhaojz.com.cn/demo/draw5.html 一.点 ...

  9. BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)

     BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议) 

  10. VOOC还真算是OPPO的核心技术

    经常电视看到OPPO打广告说它的VOOC,觉得好奇怪,就一个手机充电讲个不完,尽是骗3.4线城市的人,不过今天研究了一下,还VOOC真算是它的核心技术了. 现在选手机,电池和充电速度是非常重要的,首先 ...