AZscaaner源码解读之数据库连接(一)
准备开个新坑,但是可能近期不会更新,先写一篇开个头。
sqlalchemy
目前在Python中使用得比较多的是sqlalchemy,sqlalchemy是一个对象关系映射(ORM)。sqlalchemy主要适用的是关系型数据库,包括常见的mysql,sqlserver,sqlite等。
本节主要是讲的sqlalchemy连接mysql。可以参考文档,SQLAlchemy 1.2 Documentation
由于sqlalchemy仅仅是将数据库中的表转换为对象,但是数据库的连接还需要自己指定。在文档中,说明了有如下的Mysql Driver可以使用。
- MySQL-Python
- PyMySQL
- MySQL Connector/Python
- CyMySQL
- OurSQL
- Google Cloud SQL
- PyODBC
- zxjdbc for Jython
本文选择的是PyMySQL。PyMySQL的Github地址,参考文档。
PyMySQL常规的用法,包括安装,连接数据库等等这里不讲了,大家可以直接看文档。接下来主要就是将sqlalchemy来连接数据库了。
连接数据库的语句也很简单:
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
下面就用一个简单的例子来说明
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import pymysql
Base = declarative_base()
class User(Base):
__tablename__ = 'target_baseinfo'
id = Column(String(50), primary_key=True)
url = Column(String(50))
engine = create_engine('mysql+pymysql://root:pass@localhost:3306/autopentest')
DBSession = sessionmaker(bind=engine)
session = DBSession()
user = session.query(User).filter(User.id=='e31258c2c3dd45d4256a577fc7d5b55a').one()
print 'type:', type(user)
print 'name:', user.url
session.close()
所有的对象都是从declarative_base()继承而来,这样就保证了ORM的基本原理。
通过create_engine来创建数据库的连接,其中的autopentest要程序员自己手动创建
DBSession = sessionmaker(bind=engine) session = DBSession()得到数据库的查询管理类
通过session.query(User).filter(User.id=='').one()来进行查询
通过上面的这个简单的例子,相信大家对sqlalchemy的基本用法有了一个基本的认识了
mongoengine
mongoengine是一个对象文档映射(ODM),主要对应的非关系型数据库Nosql,mongodb。
下面同样用一个简单的例子来进行说明
from mongoengine import *
connect('music')
class Song(Document):
songid = StringField(required=True,max_length=10)
name = StringField(required=True, max_length=200)
songer = StringField(required=True,max_length=200)
album = StringField(required=True,max_length=200)
comments = ReferenceField('Comment')
class Comment(Document):
count = IntField()
hot_comments = ListField(StringField(max_length=1000))
normal_comments = ListField(StringField(max_length=1000))
comment = Comment(count='2', hot_comments=['1','2'],normal_comments=['11','22'])
comment.save()
song = Song(songid='123456',name='test',songer='ha',album='good',comments=comment)
song.save()
connect(music)就可以直接进行数据库的连接,如果不存在music,通过这个语句就会自行创建music数据库。
class Comment(Document)所有的数据库类都是继承Document对象
comment = Comment() comment.save()数据的存储也是十分的简单
总结
上面仅仅是简单的展示了如何使用sqlalchemy和mongoengine,两者对应的不同类型的数据库系统。如何选择数据库类型,就可以根据自己的业务需求来确定了。
AZscaaner源码解读之数据库连接(一)的更多相关文章
- Spark jdbc postgresql数据库连接和写入操作源码解读
概述:Spark postgresql jdbc 数据库连接和写入操作源码解读,详细记录了SparkSQL对数据库的操作,通过java程序,在本地开发和运行.整体为,Spark建立数据库连接,读取数据 ...
- Jfinal-Plugin源码解读
PS:cnxieyang@163.com/xieyang@e6yun.com 本文就Jfinal-plugin的源码进行分析和解读 Plugin继承及实现关系类图如下,常用的是Iplugin的三个集成 ...
- SDWebImage源码解读之SDWebImageDownloaderOperation
第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...
- SDWebImage源码解读 之 NSData+ImageContentType
第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...
- SDWebImage源码解读 之 UIImage+GIF
第二篇 前言 本篇是和GIF相关的一个UIImage的分类.主要提供了三个方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name ----- 根据名 ...
- SDWebImage源码解读 之 SDWebImageCompat
第三篇 前言 本篇主要解读SDWebImage的配置文件.正如compat的定义,该配置文件主要是兼容Apple的其他设备.也许我们真实的开发平台只有一个,但考虑各个平台的兼容性,对于框架有着很重要的 ...
- SDWebImage源码解读_之SDWebImageDecoder
第四篇 前言 首先,我们要弄明白一个问题? 为什么要对UIImage进行解码呢?难道不能直接使用吗? 其实不解码也是可以使用的,假如说我们通过imageNamed:来加载image,系统默认会在主线程 ...
- SDWebImage源码解读之SDWebImageCache(上)
第五篇 前言 本篇主要讲解图片缓存类的知识,虽然只涉及了图片方面的缓存的设计,但思想同样适用于别的方面的设计.在架构上来说,缓存算是存储设计的一部分.我们把各种不同的存储内容按照功能进行切割后,图片缓 ...
- SDWebImage源码解读之SDWebImageCache(下)
第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...
随机推荐
- c++ 11 是如何简化你的数据库访问接口的
之前写过一篇文章专门分析了 c++ 模板编译过程中报的一个错误:<fatal error C1045: 编译器限制 : 链接规范嵌套太深 >,其中涉及到了 qtl -- 一个使用 c++ ...
- javamelody简单介绍
JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请求. ...
- 【odoo】ref 1-6说明
(0,_ ,{'field': value}) 这将创建一个新的记录并连接它 (1,id,{'field': value}): 这是更新一个已经连接了的记录的值 ( ...
- C#无边框窗体拖动代码
1.重写 protected override void WndProc(ref Message m) { if (m.Msg == 163 && this.ClientRectang ...
- Centos7 Firewall 使用笔记
在 Centos 7 中防火墙由 firewalld 来管理,而不是以前的 iptables. 记录一下常用操作备查 firewall-cmd 操作 firewall-cmd --state 查看防火 ...
- PTA 中序输出度为1的结点
6-9 中序输出度为1的结点 (10 分) 本题要求实现一个函数,按照中序遍历的顺序输出给定二叉树中度为1的结点. 函数接口定义: void InorderPrintNodes( BiTree T ...
- Android Studio 待看博文
•前言 学习过程中找到的一些好的博文,有些可能当时就看完了并解决了我的问题,有些可能需要好几天的事件才能消化. 特此记录,方便查阅. •CSDN 给新人的一些基础常识 TextView的文字长度测量及 ...
- Mysql多表合并以及连接问题
目的 1.为了备战过两天的面试,我又重新给孙老师的课件看了一遍,学累了,就写写自己的新的体会,和遇到的问题,来进行一个记录,这是知识产出的过程,据说可以帮助我学习,看视频什么的都是被动学习,不进行及时 ...
- html页面自定义文字水印效果案例
在系统开发过程中,一些数据或页面比较敏感的地方,客户会要求实现水印效果,防止内部人员截图或拍照泄露信息. 自定义文字水印顾名思义就是利用js在完成页面渲染的同时,往页面的最底层动态生成多个带水印信息的 ...
- 数据库MySQL三
进阶4:常见函数 字节长度为12,一个汉字3个字节 8个字符 注意起始索引 1 -1 0 红色是记忆的 二.数学函数 当前日期包括时间 获取日期 获取时间 四.流程控制函数 案例 分组函数 单行函数: ...