SQLAlchemy+MySQL简易教程(Python3)

SQLAlchemy介绍

SQLAlchemy是python中最著名的ORM框架,在著名的云计算平台OpenStack中,该ORM框架被大量应用。本文对如何使用SQLAlchemy库进行简要介绍。安装该框架可以直接使用pip命令即可,这里不再赘述。本文介绍,如何利用SQLAlchemy向MySQL数据库中插入数据和查询数据。

涉及Python类以及源码实现

利用SQLAlchemy库实现ORM,主要需要创建两种类,一种是Model类,用于明确对象与与数据库表格的关系,一种是API类,用于对Model类的实例(对应数据库表格中的一行记录)进行插入和查询。比如,如果需要在MySQL中的food数据库保存一个表,表名为fruit,那么首先确保在MySQL数据库中存有food数据库,执行以下命令

create database food;

为使用SQLAlchemy库,需要安装以下包:

pip install sqlalchemy, mysql-connector-python

然后创建models.py文件,定义Model类:

from sqlalchemy import Column, String, Integer, Float
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

###################################################################
#
# Models defining the Mysql tables used to store information
#
##################################################################


class Fruit(Base):
    __tablename__ = 'fruit'   # 对应表格的名字

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(31), nullable=False)
    price = Column(Float, nullable=False)

# 通过table的名字查询到对应的Model类
table_map = {
    'fruit': Fruit
}

接着,创建api.py文件创建API类

import models as models
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker


class DbAPI:
    def __init__(self):
        self.__db_name = 'food'
        self.__db_vendor = 'mysql'
        self.__username = $数据库用户名$
        self.__password = $数据库密码$
        self.engine = self.create_eng()
        # 调用此函数将创建全部数据库表格
        models.Base.metadata.create_all(self.engine)
        self.__session = sessionmaker(bind=self.engine)()

    def create_eng(self):
        if self.__db_vendor == 'mysql':
            return create_engine('mysql+mysqlconnector://%s:%s@localhost:3306/%s?charset=utf8' %
                                 (self.__username, self.__password, self.__db_name))
        else:
            raise NotImplementedError

    def close_session(self):
    	'''
    	调用此函数断开与数据库连接
    	'''
        self.__session.close()

#######################################################################
#
# General DB APIs
#
#######################################################################

    def insert_objs(self, db_objs):
    	'''
    	此函数用于向数据库表格中插入多个record
    	db_objs: Model类(例如Fruit)实例的list
    	'''
        for db_obj in db_objs:
            self.__session.add(db_obj)
        self.__session.commit()

    def retrieve_query(self, table_name, fields=None):
        try:
            db_model = models.table_map[table_name]   # 表格对应的Model类
        except KeyError:
            return None
        query_fields = []
        if fields is not None:
            for f in fields:
                db_field = getattr(db_model, f, None)
                if db_field is not None:
                    query_fields.append(db_field)
        if len(query_fields) > 0:
            query = self.__session.query(*query_fields)   # 查询特定的字段
        else:
            query = self.__session.query(db_model) # 返回全部字段

        return query.filter()

通过调用上述两个类,创建main函数,就可以将fruit表格插入到food数据库中,并插入一条记录:

from models import Fruit
from api import DbAPI

if __name__ == '__main__':
	f = Fruit()
	f.name = 'apple'
	f.price = 10.0
	f_list = list()
	f_list.add(f)
	dbapi = DbAPI()
	dbapi.insert_objs(f_list)
	dbapi.close_session()

查看数据库内容:

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值