准备开个新坑,但是可能近期不会更新,先写一篇开个头。
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
,两者对应的不同类型的数据库系统。如何选择数据库类型,就可以根据自己的业务需求来确定了。