关于SQLALCHEMY之(一)
SQLALCHEMY是一个不可靠的方案。对于初级开发者而言,并不如SQL语句来得简明。
或者说,我不知道是不是所有的ORM数据库对象映射方案都存在这么一种情况。纯以开发逻辑而言。下述两段代码的结论是一致的:
CODE1 : 正确实现
CODE2 : 错误实现
另外附上这段代码的实现目标。partner为用户。site为资源。delegation为用户对资源的映射关系。
即:partner表保存用户的信息。site表保存资源信息。delegation表以ID为映射字段保存资源和用户的对应关系。
此处,delegation的作用是,一个用户将自己拥有的资源的权限部分开放给其他用户。
从系统使用者的角度考虑,输入的参数为:用户名称,资源名称。另外一个默认的参数是从登录状态中取得的,当前用户的ID。(查询权限控制)
由于实现模糊匹配的需要。这块的判断逻辑如下:
1. 当资源名称输入不为空,需要将关系表和资源表进行连接,实现通过名称查询资源。
2. 当用户名称输入不为空,需要将关系表和用户表进行连接,实现通过名称查询资源。
3. 为了执行条件2.需要确认关系表和用户表以哪个键进行连接。(由于授权的关系,关系表中有两列外键对应用户表ID。一个是资源所有者,一个是授权的目标用户)
4. 为了执行条件3.由于部分数据库似乎不支持FULL JOIN。因此采用UNION进行联合查询。
5. 查询除了上述1-4条件的基本逻辑外,必须满足这个条件:用户或者是具有了使用该资源的权限,或者是该资源的所有者。
从赋值角度考虑,以及过往的使用方法来看。SQLALCHEMY是支持串行操作的。但是CODE1和CODE2生成的SQL语句是不同的。
实际中,CODE2实现的功能,已知在资源名称和用户名称都有输入值的情况下,忽略了资源名称条件,查询了结果。且未知的情况是,是否满足了条件5的设计。
这件事情来看,不论结果是否是我自身代码写法风格的问题。至少这样来看。并不是简单的串联问题。
因此对当前阶段是否应该使用SQLALCHEMY产生了怀疑。至少如果使用ORM类初期,对于ORM封装内部的逻辑不了解的情况下,这件事情是不可靠的。
也许有文档说明这个问题,也许没有。不过至少上述这么一点问题是需要关注的,除此以外,对于ORM编写的SQL的调优,难度会更高。
总不能每次都用print(str(sql))的方式来解决问题吧。虽然这就是学习方法。。。
关于SQLALCHEMY之(一)的更多相关文章
- sqlalchemy学习
sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...
- tornado+sqlalchemy+celery,数据库连接消耗在哪里
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
- 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)
第十二章 mysql ORM介绍 2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- SQLAlchemy(一)
说明 SQLAlchemy只是一个翻译的过程,我们通过类来操作数据库,他会将我们的对应数据转换成SQL语句. 运用ORM创建表 #!/usr/bin/env python #! -*- coding: ...
- sqlalchemy(二)高级用法
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
- sqlalchemy(一)基本操作
sqlalchemy(一)基本操作 sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. 安装 需要安装MySQLdb pip install ...
- python SQLAlchemy
这里我们记录几个python SQLAlchemy的使用例子: 如何对一个字段进行自增操作 user = session.query(User).with_lockmode('update').get ...
- Python-12-MySQL & sqlalchemy ORM
MySQL MySQL相关文章这里不在赘述,想了解的点击下面的链接: >> MySQL安装 >> 数据库介绍 && MySQL基本使用 >> MyS ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
随机推荐
- SimpleMembership
最近2个月以来,一直在学习MVC,从最开始的2,一直到最新的4.从原来的aspx到现在的Razor引擎,越学越开心,越学越上瘾. 最近为新项目做准备,打算用MVC4,VS2012+SQL2012,反正 ...
- [转载] Redis之七种武器
转载自http://blog.nosqlfan.com/html/2942.html?ref=rediszt 长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头是古龙笔下的七种武器,而本文打算将Re ...
- 【Win 10 应用开发】UI Composition 札记(六):动画
动画在 XAML 中也有,而且基本上与 WPF 中的用法一样.不过,在 UWP 中,动画还有一种表现方式—— 通过 UI Composition 来创建. 基于 UI Composition 的动画, ...
- 【转】使用PowerDesigner的建模创建升级管理数据库
使用PowerDesigner的建模创建升级管理数据库 PowerDesigner是一种著名的CASE建摸工具,最开始为数据库建模设计,即物理模型(Physical Data Model)用于生成数据 ...
- 3)C语言数组(C自考学习)
一维数组 一维数组中的元素是排列成一行的,当需要存放一行或一列数据时常用一维数组.一维数组的元素常用"数组名[下标]"来表示,其中,下表是从0开始的.例如:a[0]="h ...
- 《java.util.concurrent 包源码阅读》06 ArrayBlockingQueue
对于BlockingQueue的具体实现,主要关注的有两点:线程安全的实现和阻塞操作的实现.所以分析ArrayBlockingQueue也是基于这两点. 对于线程安全来说,所有的添加元素的方法和拿走元 ...
- 程序员的自我救赎---1.4.2: 核心框架讲解(BLL&Tool)
<前言> <目录> (一) Winner2.0 框架基础分析 (二) 短信中心 (三)SSO单点登录 (四)PLSQL报表系统 (五)钱包系统 (六)GPU支付中心 (七)权限 ...
- [面试没答上的问题1]http请求,请求头和响应头都有什么信息?
最近在找工作,面试官问了一些问题自己并没有回答上,这里做一个小结. http请求,请求头和响应头都有什么信息? 页面和服务器交互最常见的方式就是ajax,ajax简单来说是浏览器发送请求到服务端,然后 ...
- C# 使用Task实现任务超时,多任务一起执行
简介:充分使用Task的异步功能代码实现:1.实现了任务超时 退出任务 2.多个任务一起执行 /// <summary> ///做事 需要 ms秒 才能完成 / ...
- 洛谷银牛派对SPFA
题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the b ...