系列文章入口
《Python3 编程实战 Tetris 机器人》
设计思路
咱们通用的 ORM,基本模式都是想要脱离数据库的,简直都在编程语言层面建设模型,由程序去与数据库打交道。尽管脱离了数据库的具体操作,但咱们要建设各种模型文档,用代码去写表之间的关系等等操作,让初学者一时如坠云雾。我的做法是把逻辑退出到 Python 的字典中,程序将对象主动映射成为规范的 SQL 查问语句。只有咱们了解了规范的 SQL 语言,咱们就可能实现数据库查问操作。
智能查问形式设计
查问保留字:page, size, sort, search, lks, ins, ors, count, sum, group
page, size, sort, 分页排序
查问示例:
dao = BaseDao()
rs = dao.select("users",{"page": 1, "size":10, "sort":"age desc"})
print(rs)
生成 sql:SELECT * FROM users ORDER BY age desc LIMIT 0,10
search, 含糊查问切换参数,不提供时为准确匹配
提供字段查问的准确匹配与含糊匹配的切换。```
dao = BaseDao()
rs = dao.select("users",{"username": "john", "password":"123", "search":"1"})
print(rs)
生成 sql:SELECT * FROM users WHERE username like '%john%' and password like '%123%'
```
ins, lks, ors
这是最重要的三种查问形式,如何找出它们之间的共同点,缩小冗余代码是要害。
-
ins, 数据库表单字段 in 查问,一字段对多个值,例:
查问示例:dao = BaseDao() rs = dao.select("users",{"ins":["age", 11,22,26]}) print(rs) 生成 sql:SELECT * FROM users WHERE age in (11,22,26)
-
ors, 数据库表多字段准确查问,or 连贯,多个字段对多个值,例:
查问示例:dao = BaseDao() rs = dao.select("users",{"ors":["age", 11,26]}) print(rs) 生成 sql:SELECT * FROM users WHERE (age = 11 or age = 26)
-
lks, 数据库表多字段含糊查问,or 连贯,多个字段对多个值,例:
查问示例:dao = BaseDao() rs = dao.select("users",{"lks":["username", "john","password","123"]}) print(rs) 生成 sql:SELECT * FROM users WHERE (username like '%john%' or password like '%123%')
count, sum
这两个统计求和,解决形式也相似,查问时个别要配合 group 与 fields 应用。
-
count, 数据库查问函数 count,行统计,例:
查问示例:dao = BaseDao() rs = dao.select("users",{"count":["1", "total"]}) print(rs) 生成 sql:SELECT *,count(1) as total FROM users
-
sum, 数据库查问函数 sum,字段求和,例:
查问示例:dao = BaseDao() rs = dao.select("users",{"sum":["age", "ageSum"]}) print(rs) 生成 sql:SELECT username,sum(age) as ageSum FROM users
group, 数据库分组函数 group,例:
查问示例:
dao = BaseDao()
rs = dao.select("users",{"group":"age"})
print(rs)
生成 sql:SELECT * FROM users GROUP BY age
不等操作符查问反对
反对的不等操作符有:>, >=, <, <=, <>, =;逗号符为分隔符,一个字段反对一或二个操作。
非凡处:应用 ”=” 能够使某个字段跳过 search 影响,让含糊匹配与准确匹配同时呈现在一个查问语句中
-
一个字段一个操作,示例:
查问示例:dao = BaseDao() rs = dao.select("users",{"age":">,10"}) print(rs) 生成 sql:SELECT * FROM users WHERE age> 10
-
一个字段二个操作,示例:
查问示例:dao = BaseDao() rs = dao.select("users",{"age":">=,10,<=33"}) print(rs) 生成 sql:SELECT * FROM users WHERE age>= 10 and age<= 33
-
应用 ”=” 去除字段的 search 影响,示例:
查问示例:dao = BaseDao() rs = dao.select("users",{"age":"==,18","username":"john","search":"1"}) print(rs) 生成 sql:SELECT * FROM users WHERE age= 18 and username like '%john%'
我的项目地址
https://gitee.com/zhoutk/ptetris
或
https://github.com/zhoutk/ptetris
运行办法
1. install python3, git
2. git clone https://gitee.com/zhoutk/ptetris (or download and unzip source code)
3. cd ptetris
4. python3 tetris
This project surpport windows, linux, macOs
on linux, you must install tkinter first, use this command:
sudo apt install python3-tk
相干我的项目
曾经实现了 C ++ 版,我的项目地址:
https://gitee.com/zhoutk/qtetris