SQLAlchemy基础操作一
用前安装
pip3 install sqlalchemy
ORM
ORM就是运用面向对象的知识,将数据库中的每个表对应一个类,将数据库表中的记录对应一个类的对象。将复杂的sql语句转换成类和对象的操作。
执行源生SQL
- import time
- import threading
- import sqlalchemy
- from sqlalchemy import create_engine
- from sqlalchemy.engine.base import Engine
- engine = create_engine(
- "mysql+pymysql://root:123@47.93.4.198:3306/s6?charset=utf8",
- max_overflow=0, # 超过连接池大小外最多创建的连接
- pool_size=5, # 连接池大小
- pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
- pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
- )
- from sqlalchemy.pool import _ConnectionFairy
- def task(arg):
- conn = engine.raw_connection()
- print('你到了',conn.connection)
- cursor = conn.cursor()
- cursor.execute(
- "select * from users"
- )
- result = cursor.fetchall()
- import time
- time.sleep(5)
- cursor.close()
- conn.close()
- for i in range(20):
- t = threading.Thread(target=task, args=(i,))
- t.start()
注意: 查看连接 show status like 'Threads%';
ORM表操作
一创建数据库表
- import datetime
- from sqlalchemy import create_engine
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index
- Base = declarative_base()
- class Users(Base):
- __tablename__ = 'users'
- id = Column(Integer, primary_key=True)
- name = Column(String(32), index=True, nullable=False)
- # email = Column(String(32), unique=True)
- # ctime = Column(DateTime, default=datetime.datetime.now)
- # extra = Column(Text, nullable=True)
- __table_args__ = (
- # UniqueConstraint('id', 'name', name='uix_id_name'),
- # Index('ix_id_name', 'name', 'email'),
- )
- def init_db():
- """
- 根据类创建数据库表
- :return:
- """
- engine = create_engine(
- "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
- max_overflow=0, # 超过连接池大小外最多创建的连接
- pool_size=5, # 连接池大小
- pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
- pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
- )
- Base.metadata.create_all(engine)
- def drop_db():
- """
- 根据类删除数据库表
- :return:
- """
- engine = create_engine(
- "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
- max_overflow=0, # 超过连接池大小外最多创建的连接
- pool_size=5, # 连接池大小
- pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
- pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
- )
- Base.metadata.drop_all(engine)
- if __name__ == '__main__':
- drop_db()
- init_db()
二含FK与M2M的表
- import datetime
- from sqlalchemy import create_engine
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index
- from sqlalchemy.orm import relationship
- Base = declarative_base()
- # ------------ 单表示例 -----------#
- class Users(Base):
- __tablename__ = 'users'
- id = Column(Integer, primary_key=True)
- name = Column(String(32), index=True)
- age = Column(Integer, default=18)
- email = Column(String(32), unique=True)
- ctime = Column(DateTime, default=datetime.datetime.now)
- extra = Column(Text, nullable=True)
- __table_args__ = (
- # UniqueConstraint('id', 'name', name='uix_id_name'),
- # Index('ix_id_name', 'name', 'extra'),
- )
- class Hosts(Base):
- __tablename__ = 'hosts'
- id = Column(Integer, primary_key=True)
- name = Column(String(32), index=True)
- ctime = Column(DateTime, default=datetime.datetime.now)
- # ##################### 一对多示例 #########################
- class Hobby(Base):
- __tablename__ = 'hobby'
- id = Column(Integer, primary_key=True)
- caption = Column(String(50), default='篮球')
- class Person(Base):
- __tablename__ = 'person'
- nid = Column(Integer, primary_key=True)
- name = Column(String(32), index=True, nullable=True)
- hobby_id = Column(Integer, ForeignKey("hobby.id"))
- # 与生成表结构无关,仅用于查询方便
- hobby = relationship("Hobby", backref='pers')
- # ##################### 多对多示例 #########################
- class Server2Group(Base):
- __tablename__ = 'server2group'
- id = Column(Integer, primary_key=True, autoincrement=True)
- server_id = Column(Integer, ForeignKey('server.id'))
- group_id = Column(Integer, ForeignKey('group.id'))
- class Group(Base):
- __tablename__ = 'group'
- id = Column(Integer, primary_key=True)
- name = Column(String(64), unique=True, nullable=False)
- # 与生成表结构无关,仅用于查询方便
- servers = relationship('Server', secondary='server2group', backref='groups')
- class Server(Base):
- __tablename__ = 'server'
- id = Column(Integer, primary_key=True, autoincrement=True)
- hostname = Column(String(64), unique=True, nullable=False)
- def init_db():
- """
- 根据类创建数据库表
- :return:
- """
- engine = create_engine(
- "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
- max_overflow=0, # 超过连接池大小外最多创建的连接
- pool_size=5, # 连接池大小
- pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
- pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
- )
- Base.metadata.create_all(engine)
- def drop_db():
- """
- 根据类删除数据库表
- :return:
- """
- engine = create_engine(
- "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
- max_overflow=0, # 超过连接池大小外最多创建的连接
- pool_size=5, # 连接池大小
- pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
- pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
- )
- Base.metadata.drop_all(engine)
- if __name__ == '__main__':
- drop_db()
- init_db()
三 操作数据库表
- from sqlalchemy.orm import sessionmaker
- from sqlalchemy import create_engine
- from models import Users
- engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s6", max_overflow=0, pool_size=5)
- Session = sessionmaker(bind=engine)
- # 每次执行数据库操作时,都需要创建一个session
- session = Session()
- # ############# 执行ORM操作 #############
- obj1 = Users(name="alex1")
- session.add(obj1)
- # 提交事务
- session.commit()
- # 关闭session
- session.close()
SQLAlchemy基础操作一的更多相关文章
- SQLAlchemy基础操作二
多线程示例 import time import threading from sqlalchemy.ext.declarative import declarative_base from sqla ...
- python基础操作以及hdfs操作
目录 前言 基础操作 hdfs操作 总结 一.前言 作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- 【Learning Python】【第二章】Python基础类型和基础操作
基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...
- Emacs学习心得之 基础操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...
- Git基础操作
配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...
- activiti基础操作
package activitiTest; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInp ...
- 《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》
注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D基础操作 第一课<G3D编辑器初探> G3D编辑器介绍,依托于一个复杂场景,讲解了场景视图及其基本操作,属性面板和工具栏的 ...
- MYSQL 基础操作
1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...
随机推荐
- URI和URL差别以及相对路径和绝对路径的差别
一.URL和URI定义: 1.URL是全球资源定位符的英文所写,您平时上网时在IE浏览器中输入的那个地址就是URL.比方:网易 http://www.163.com就是一个URL. 2.URI是Web ...
- POJ - 1611The Suspects-并查集
POJ - 1611 The Suspects Time Limit: 1000MS Memory Limit: 20000KB 64bit IO Format: %I64d & %I ...
- JAVA入门[15]-过滤器filter
一.过滤器 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 参考:http:/ ...
- 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 ...
- idea的mybatis的xml文件总是报警告SQL dialect is not configured
警告: No data sources are configured to run this SQL and provide advanced code assistance. Disable thi ...
- bzoj 3551: [ONTAK2010]Peaks加强版
Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个数,第i个数为h_i 接下来M行,每行3个数a b c,表示从a到b有一条困难值为c的双向路径. 接下来 ...
- 一口一口吃掉Volley(四)
欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/02/17/一口一口吃掉Volley(四)/ 非常感谢你能够坚持看到第四篇,同时这也是这个Volley系列教 ...
- JS画几何图形之一【直线】
JS画图的想法经过大脑的时候,觉得有点意思,所以就实践了一番.JS画图为系列文章,本是讲点.线和面 先看样例:http://www.zhaojz.com.cn/demo/draw5.html 一.点 ...
- BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
- VOOC还真算是OPPO的核心技术
经常电视看到OPPO打广告说它的VOOC,觉得好奇怪,就一个手机充电讲个不完,尽是骗3.4线城市的人,不过今天研究了一下,还VOOC真算是它的核心技术了. 现在选手机,电池和充电速度是非常重要的,首先 ...