AZscaaner原始碼解讀之資料庫連線 一

2022-09-05 19:21:13 字數 2899 閱讀 2452

準備開個新坑,但是可能近期不會更新,先寫一篇開個頭。

目前在python中使用得比較多的是sqlalchemy,sqlalchemy是乙個物件關係對映(orm)。sqlalchemy主要適用的是關係型資料庫,包括常見的mysql,sqlserver,sqlite等。

本節主要是講的sqlalchemy連線mysql。可以參考文件,sqlalchemy 1.2 documentation

由於sqlalchemy僅僅是將資料庫中的表轉換為物件,但是資料庫的連線還需要自己指定。在文件中,說明了有如下的mysql driver可以使用。

本文選擇的是pymysql。pymysql的github位址,參考文件。

pymysql常規的用法,包括安裝,連線資料庫等等這裡不講了,大家可以直接看文件。接下來主要就是將sqlalchemy來連線資料庫了。

連線資料庫的語句也很簡單:

mysql+mysqlconnector://:@[:]/
下面就用乙個簡單的例子來說明

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是乙個物件文件對映(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.s**e()

song = song(songid='123456',name='test',songer='ha',album='good',comments=comment)

song.s**e()

connect(music)就可以直接進行資料庫的連線,如果不存在music,通過這個語句就會自行建立music資料庫。

class comment(document)所有的資料庫類都是繼承document物件

comment = comment() comment.s**e()資料的儲存也是十分的簡單

上面僅僅是簡單的展示了如何使用sqlalchemymongoengine,兩者對應的不同型別的資料庫系統。如何選擇資料庫型別,就可以根據自己的業務需求來確定了。

Qwt原始碼解讀之QwtInterval 類

qwtinterval 類表徵乙個區間,這個區間由兩個double型別的上限值max和下限值min所表示。它可以表示 min,max min,max min,max 和 min,max 等4種情況。分析 cpp view plain copy class qwt export qwtinterval...

metaq原始碼解讀之FetchManager

fetchmanager 請求管理器介面。既然是管理器,就需要知道管理的物件是什麼?fetchrequest 管理的是一次次的請求。既然是管理器,就需要給被管理者提供容所?fetchrequestqueue 請求delay queue。既然是管理器,就需要有管理實施者?fetchrequestrun...

Opencv 原始碼解讀之 ImageEncoder

imagedecoder類 imagedecoder這個類,這個類其實就是乙個影象資料的解析類。且看下面的源 class baseimagedecoder 這就是我們要找的imagedecoder類 int width const int height const int type const vi...