此文已由作者尤炳棋授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

入职考拉半年多,一直在从事KLQA平台的开发,KLQA平台后端是用基于python的flask框架搭建的。Flask框架采用的数据库是sqlalchemy。Sqlalchemy是基于ORM技术的关系型数据库,上手非常快。在开发KLQA平台的这半年里,积累了一些Sqlalchemy的实战经验。

什么是ORM?

ORM是英文Object Relational Mapping的缩写,翻译成中文称为“对象关系映射”。通俗的来讲,ORM就是将数据库中的表映射为pyhon的类,这样对数据库的操作就可以转化成对类的操作,非常方便。

Sqlalchemy的安装

通过easy_install安装只需要输入easy_install sqlalchemy即可,如果是通过pip安装,命令是sudo pip install sqlalchemy,

连接数据库

为了连接数据库,我们可以新建一个python文件,比如我们新建config.py,在文件中设置SQLALCHEMY_DATABASE_URI 常量,声明ORM底层所用数据库的访问URL。

设置方式为SQLALCHEMY_DATABASE_URI=‘mysql://用户名:密码@数据库地址/数据库名称?charset=utf8’。还可以设置SQLALCHEMY_COMMIT_ON_TEARDOWN常量,

如果该常量为True,则每次请求结束后都会自动提交数据库中的变动。再用create_engine创建就行了。

创建映射类

比如我们用mysql语句创建了一张NewTable表,mysql语句如下:

CREATE TABLE ` NewTable` (
`id`  int(10) NOT NULL AUTO_INCREMENT ,
`column1`  text NULL ,
`column2`  text NULL ,
`column3`  varchar(1000) NULL ,
`column4`  datetime NULL ,
PRIMARY KEY (`id`)
);

则相应的映射类为:

class NewTable(db.Model):
    __tablename__ = 'weekly_report'
    id = db.Column(db.Integer, primary_key=True) 
    column1 = db.Column(db.Text)   
    column2 = db.Column(db.Text) 
    column3 = db.Column(db.String)
    column4 = db.Column(db.DateTime, default=now())
 
def__init__(self,column1, column2, column3, column4):
        self.column1= major_item
        self.column2= major_project
        self.column3= report_remark
        self.column4= create_person

其中映射类要继承sqlalchemy中的Model类, __tablename__ 表示该类要映射的数据库表名,每一个表字段都映射到类中的成员变量。下面介绍一下数据库最基本的“增删改查”

如果我要查询column3等于我邮箱的记录,可以使用filter()方法

db.session.query(NewTable).filter(NewTable.column3 == youbingqi@corp.netease.com)

如果在后面加上.all()返回的是一个list,如果加上first()返回的是查询结果的第一条。

db.session.query(NewTable).filter(NewTable.column3 == youbingqi@corp.netease.com ).all(),将查询结果以list形式返回

db.session.query(NewTable).filter(NewTable.column3 == youbingqi@corp.netease.com ).first(),返回查询结果的第一条。

比如我要增加一条记录

new_record = NewTable(column1, column2, column3, column4)
db.session.add(new_record)
db.session.commit()

如果要删除所有column3等于我邮箱的记录,可以这样操作

db.session. query(NewTable).filter(NewTable.column3 == youbingqi@corp.netease.com).delete()

更改数据库中的记录可以用updata()方法,现在我们将数据库中所有创建人是我的记录进行更改

db.session. query(NewTable).filter(NewTable.column3 == youbingqi@corp. netease.com).updata({NewTable.column3 :”youbingqi”})

数据库联表查询

比如要查询JiraProjectTask表中,类型为“项目”的工程,工程的类型保存在JiraTask表中,所以要和JiraTask联表查询。如下联表查询结果返回的是两个列表,需要用两个变量来保存返回结果。第一个变量保存的是query()方法中第一个表的字段,第二个变量保存的是query()方法中第二个表的字段。

project_list, task_list = db.session.query(JiraProjectTask, JiraTask).filter(JiraTask.jira_key == JiraProjectTask.jira_key,JiraTask.jira_type == '项目').all()

其他常用方法:

or_ , 查询数据库是放入filter中表示筛选条件是或的关系。

.order_by,对查询结果按照某个字段进行排序。

.like(),模糊查询方法,方法中用%匹配多个字符。

.group_by, 对查询结果进行分组。

.count(),计算查询结果的个数,性能较差,不推荐使用,推荐使用all()返回list列表,再用len()方法求个数

总结:

Sqlalchemy是基于ORM的关系型数据库,将表和类进行相互映射,就是把数据库表的一行记录与一个对象互相做自动转换,通过对映射类进行操作就能对数据库进行变更,与mysqldb、pymysql这些没有采用ORM模型的数据库相比,操作上更方便简单,容易上手。

免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 wireshark抓包分析——TCP/IP协议
【推荐】 react技术栈实践(2)

新手入门Sqlalchemy的更多相关文章

  1. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  2. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

  3. 原创:从零开始,微信小程序新手入门宝典《一》

    为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...

  4. 【原创】新手入门一篇就够:从零开发移动端IM

    一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...

  5. 课程上线 -“新手入门 : Windows Phone 8.1 开发”

    经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...

  6. WordPress建站 新手入门

    WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点需要什么条件? 3. WordPre ...

  7. 安卓自动化测试(2)Robotium环境搭建与新手入门教程

    Robotium环境搭建与新手入门教程 准备工具:Robotium资料下载 知识准备: java基础知识,如基本的数据结构.语法结构.类.继承等 对Android系统较为熟悉,了解四大组件,会编写简单 ...

  8. mongodb新手入门,mongodb命令学习

    下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...

  9. iOS简易柱状图(带动画)--新手入门篇

    叨逼叨 好久没更新博客了,才几个月,发生了好多事情,处理了好多事情.不变的是写代码依然在继续. 做点啥子 看看objective-c的书,学着写了个柱状图,只是练习的demo而已,iOS上的图表控件已 ...

随机推荐

  1. BZOJ1820:[JSOI2010]Express Service 快递服务(DP)

    Description 「飞奔」快递公司成立之后,已经分别与市内许多中小企业公司签订邮件收送服务契约.由于有些公司是在同一栋大楼内,所以「飞奔」公司收件的地点(收件点)最多只有m点 (1, 2, …, ...

  2. 【[ZJOI2008]骑士】

    这道题好暴力啊 发现自己刚学\(OI\)的时候对着这道题写了一个大搜索 发现已经看不懂了 果然我现在菜到连一年半前的我都不如了 这其实是一个基环树\(dp\)啦,基环树上的最大点独立集 其实很简单,我 ...

  3. linux服务基础之CentOS6编译安装mariadb

    1. 下载mariadb https://downloads.mariadb.org/mariadb/+releases/ 2. 解压到指定目录 # tar xf mariadb--linux-x86 ...

  4. 2016 ACM/ICPC亚洲区大连站-重现赛 解题报告

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5979 按AC顺序: I - Convex Time limit    1000 ms Memory li ...

  5. div可编辑框,去除粘贴文字样式😄

    上个月做了个聊天的需求(网页版的).说到聊天都想到输入框,说到输入框都会想到input,但是input标签是不支持插入图片的(包括areatext标签).查阅了一些资料就看到div标签有一个属性con ...

  6. JavaScript函数的方法

    在一个对象中绑定函数,称为这个对象的方法. 在JavaScript中,对象的定义是: var xiaoming = { name:'小明'; birth:1990; }; 但是,如果我们给xiaomi ...

  7. Question20180106 Java环境变量的配置及为什么要配置环境变量

    Question 1  Java环境变量的配置及为什么要配置环境变量 Q1.1为什么要配置环境变量 在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PA ...

  8. Hibernate知识点小结(四)--JPA

    一.jpa的简介和入门 JPA:Java Persistence API,接口规范    Hinernate内部为JPA规范提供实现        开发步骤(EntityManager):       ...

  9. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--I-填空题

    链接:https://www.nowcoder.com/acm/contest/90/I 来源:牛客网 1.题目描述 牛客网是是一个专注于程序员的学习和成长的专业平台,集笔面试系统.课程教育.社群交流 ...

  10. typecho博客组插件:openSug.js百度搜索框下拉提示免费代码

      Typecho候选搜索增强插件:安装openSug插件即可获得带有“搜索框提示”功能的搜索框,让Typecho搜索更便捷! 支持百度.谷歌.雅虎.Yandex.360好搜.UC神马.酷狗.优酷.淘 ...