zoukankan      html  css  js  c++  java
  • 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,两者对应的不同类型的数据库系统。如何选择数据库类型,就可以根据自己的业务需求来确定了。

  • 相关阅读:
    React创建组件的方式
    react jsx语法
    mui区域滚动失效的问题
    css3 currentColor
    http协议
    iframe用法
    html关于强制显示、隐藏浏览器的滚动条
    null与undefind的区别(转)
    如何实现背景透明,文字不透明,兼容所有浏览器?
    事件委托
  • 原文地址:https://www.cnblogs.com/babers/p/6730142.html
Copyright © 2011-2022 走看看