专栏首页python3Python工具之SQLAlchemy

Python工具之SQLAlchemy

工具介绍:SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

工作方式:通过定义类的方式来操作数据库,一个类对应数据库中的一个表,一个类对象对应表中的一行数据,通过实例化类的方式来向数据库表中插入数据,通过对象.字段名来获取表中相应字段的值。

以一个具体的例子来说明:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DATETIME
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

# 以字典的形式配置好Mysql数据库的连接信息
mysql_dic = {
   'mysql_user':'test',
   'mysql_pass':'1234',
   'mysql_ip':'192.168.192.168',
   'mysql_port':3306,
   'mysql_db':'test',
}

class Connect(object):          # 创建一个专门连接数据库的类
   Base = declarative_base()    # 创建对象的基类
   def __init__(self):
      mysql_str = "mysql+mysqldb://{mysql_user}:{mysql_pass}@{mysql_ip}:{mysql_port}/{mysql_db}"    # 连接数据库的命令行
      mysql_con = mysql_str.format(**mysql_dic)                 # 格式化命令
      self.engine = create_engine(mysql_con, max_overflow=5)    # 初始化数据库连接
      Session = sessionmaker(bind=self.engine)                 # 创建一个会话来操作数据库
      self.session = Session()

   def create_table(self):
      '''寻找Base的所有子类,按照子类的结构在数据库中生成对应的数据表信息'''
      Connect.Base.metadata.create_all(self.engine)

class Server(Connect.Base):    # 定义一个类(其实就是一张数据库表)继承Base基类
   __tablename__ = 'server'    # 表名,以下均为表字段
   id = Column(Integer,autoincrement=1,primary_key=True)
   date = Column(DATETIME)
   user = Column(String(20))
   ip = Column(String(50))
   group = Column(String(50))

if __name__ == '__main__':
   c = Connect()    # 连接数据库并创建程序与数据库之间的会话
   c.create_table() # 创建定义的server表 
   
      # 增加数据
    s = Server(user='test',ip='192.168.100.1',group='monitor') # 实例化一个类对象
    c.session.add(s) # 通过session会话向表中添加一行数据(一个类对象)
    
    # c.session.add_all([
    #     Server(user='test',ip='192.168.100.2',group='monitor'),
    #     Server(user='test',ip='192.168.100.3',group='monitor'),
    # ])    # 一次添加多条数据
    
    c.session.commit()    # 提交
     
    
    # 删除数据(删除server表中id大于2的数据)
    c.session.query(Server).filter(Server.id > 2).delete()
    c.session.commit()
    
    # 修改数据(修改server表中id大于2的数据的group字段值为JAVA)
    c.session.query(Server).filter(Server.id > 2).update({'group' : 'JAVA'})
    c.session.commit()
    
    # 查询数据(查询server表中所有user字段值为test的数据)
    ret = c.session.query(Server).filter_by(user='test').all()
    for i in ret:
        print i.ip    # 获取满足条件的数据中ip字段的值
         
    c.session.close()     # 关闭会话

博客的部分内容和思路整理自武沛齐的博客

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python自动化管理mysql主从同步

    通过定义mysqldconfig类   mysqld_vars = {}  从里面获得很多配置文件相关参数写入字典

    用户2398817
  • Python之MySQL

    mysql数据库存储数据的方式与excel类似,都是以表格的形式来存储数据。 excel一般用一张表来存储少量的数据,数据库可以用多个表来存储大量的数据。

    用户2398817
  • mysql-表的操作

    数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎

    用户2398817
  • Skype for Business Web 应用

     微软统一通信,我最看好的一点就是跨界无缝沟通,其中比较欣赏的是网页加入会议,支持IE\Chrome\Firfox,只要有internet、有pc、有浏览器,就...

    杨强生
  • 如何复制单篇微博链接?

    相信很多人还不知道怎么找单篇微博的链接,其实手机上比较方便,点开微博很快地就可以找到,可是网页版的确实不好找。这里小轻论坛给大家整理了下如何找微博链接的方法,网...

    半夜喝可乐
  • 循序渐进 MySQL 事务隔离级别

    事务简言之就是一组 SQL 执行要么全部成功,要么全部失败。MYSQL 的事务在存储引擎层实现。

    波罗学
  • 高效的数据压缩编码方式 Protobuf

    Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等。

    一缕殇流化隐半边冰霜
  • Ipv4和Ipv6过渡技术之间的设计和比较迁移

    摘要:IPv4是Internet协议的旧版本,具有由Internet工程任务组(IETF)开发的名为IP Next Generation(IPng)或IPv6的...

    RockNPeng
  • pymodbus使用介绍

    当我们写程序写的多一些时,自然就会使用第三方库,在使用过程中注意规避掉一些坑即可。

    用户5908113
  • Button Mapper:无需Root更改硬件按键映射

    美丽应用

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动