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++ ...
- FreeBSD安装xorg + xfce 4
FreeBSD安装xorg,以及xfce 安装xorg 可选包 -xorg 完整xorg环境包 -xorg-minimal xorg最小化包 ports安装 cd /usr/ports/x11/xor ...
- 如何获取下载 FreeBSD
『如何获取下载 FreeBSD 』 『如何获取下载 FreeBSD 』 FreeBSD 是免费获取的. [下载地址] O网页链接 版本选择,尽量选择较新版本,桌面用户可选择 current 版本.st ...
- LNMP配置——Nginx配置 —— Nginx的访问日志
一.配置 先来看看Nginx的日志格式 #grep -A2 log_format /usr/local/nginx/conf/nginx.conf log_format combined_realip ...
- 擅用ABAP错误捕捉,避免系统Dump
有时候我们在写程序时,会因为计算公式不符合算术表达式,计算公式的字段值不是纯数值等等问题造成程序dump,这个时候我们在无法避免字段赋值错误的情况下,又不想程序dump可以采取catch异常的方法进行 ...
- 计算机图形学中使用Turbo C++画图步骤
一.下载安装Turbo C++ 我安装的是Turbo C++ 3.2.2.0下载链接 二.画图 1.打开Turbo C++,点击右下角start turbo C++ 2.点击file ->new ...
- Ubuntu之软件包管理 (最全最精)
Centos与Ubuntu的关系 * CentOS之前的地位:Fedora稳定版-->发布-->RHEL稳定版-->发布-->CentOS * CentOS如今的地位:Fedo ...
- 一次 outline 去除经验(非继承属性,看着像继承)
情况描述: 目前维护的老项目是通过 easyui 生成的 html,嵌套结构非常多,当点击元素后,会有个边框???非常影响页面美观,这是啥迷惑点击交互??? 经验告诉我,这是 css 的 outlin ...
- PBFT共识算法详解
PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错) 一.概述 拜占庭将军问题最早是由 Leslie Lamport 在 1982 年发表的论文<T ...
- docker命令快速入门
docker快速入门系列 Docker hello world hello world $ docker run ubuntu:15.10 /bin/echo "Hello world&qu ...