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()数据的存储也是十分的简单

总结

上面仅仅是简单的展示了如何使用sqlalchemymongoengine,两者对应的不同类型的数据库系统。如何选择数据库类型,就可以根据自己的业务需求来确定了。

原文地址:https://www.cnblogs.com/babers/p/6730142.html