0%

在SQLite中,如果没有指定id自增长,那么数据库会默认加上RecNo的字段,但是你使用下面的命令是无法获取RecNo的。

1
select RecNo from tablename

其实在数据中,RecNo的名字应该是rowid,所以我们使用这个命令就可以获取到RecNo啦~

1
select rowid from tablename

引言

网上有好多nginx部署flask的教程,但是每一个教程或多或少有点问题,这里我把我的部署过程记录下来,分享一下。

安装nginx

这个比较简单,直接apt-get安装就可以了。

1
sudo apt-get install nginx

上传flask应用

我直接将应用放在了用户目录下面/home/yu/my_flask。目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
my_flask
|
+--venv #虚拟环境目录
|
+--app
| |
| +--templates
| |
| +--__init__.py
| |
| +--view.py
|
+--manage.py
阅读全文 »

前言

最近同学邀请我一起参加一个软件开发大赛,用一款现有的安卓APP——智能列车时刻表进行二次开发,指导老师(STK)给我们的修改建议是增加数据库的增量更新。然后就去查资料啊,做啊。。

准备

网上的建议基本上是在数据库中加入一个字段,用来表明每条记录的最后修改时间,然后客户机向服务器请求,服务器返回更新字段的信息,客户机匹配后向服务器请求修改后的数据。
但是在每一条数据后加一个更新标志,传递的数据会非常大,对手机流量消耗蛮大的,所以我决定在数据库中另开一张表(updateTime),用来管理更新内容,每条记录管理100条数据的更新。updateTime表格式如下:

字段 类型 备注
tableName char 记录表名
row int 管理表中第row*100 + 1 ~ (row + 1) * 100行数据
timestamp int 记录最后更新的时间戳

动手

设计出解决方案后,就开始动手啦,我们服务器端准备使用Python+flask实现。然后返回json字符串,客户机拿到后处理更新数据库就可以啦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def query():
tableName = request.args.get('tablename')
row = (int)(request.args.get('row')) * 100 + 1
if tableName is None or row is None:
msg = {
"msg":"error",
"data":"no tablename or row"
}
return json.dumps(msg)
if row < 0:
msg = {
"msg":"error",
"data":"row >= 0!"
}
return json.dumps(msg)
result = query_db('SELECT rowid, * FROM %s WHERE rowid>=? AND rowid<?' % (tableName), (row, row + 100))
return json.dumps(result)

还有点小问题,就是没有对表名进行过滤,可能会存在SQL注入攻击,但是现在就不考虑这些啦~
增量更新就说到这里了,下一篇会介绍如何从12306上爬数据了。

安装cifs文件系统

1
sudo apt-get install cifs-utils

挂在小米路由器硬盘

1
sudo mount -t cifs -orw //192.168.31.1/XiaoMi-usb0 xiaomi