手机自动化测试IDE —– 手把手教你用Airtest模拟器来连接手机

大家好,我是IT共享者,人称皮皮。上篇文章讲了Airtest的安装和IDE控件详解相关知识,手机自动化测试IDE—–Airtest基本操作方法、手机自动化测试IDE —– Airtest的安装和IDE控件详解,这篇文章来给大家分享用Airtest模拟器来连接手机。

前言

也许有人觉得抓手机的数据包都费劲,还搞什么自动化,而且肯定不简单。但我要告诉你的是,这一切都被一个叫Airtest的自动化测试软件给搞定了,你只需要把它一直运行着,你的手机上的所有操作,就都交给它了,直接就是点点点。

连接设备

1.模拟器手机连接Airtest

这里我们需要连接手机,由于小编有模拟器,为了不影响小编玩手机,所以我决定用Airtest模拟器来连接手机,打开模拟器,选择关于平板电脑,如图:

连击多次版本号,直到出现开发者选项功能,然后打开开发者选项下的USB调试,如图:

这样我们就开启了USB调试,下面我们Airtest来远程连接我们的模拟器,如图:

这里有一个知识需要向大家说明的就是,我们连接的远程端口号不是随便弄的,而是根据模拟器的不同而使用的不同的端口号,模拟器和端口号一一对应关系如下:

这样选择好我们的主机地址和端口号后就可以进行连接了,然后我们点击connect就可以直接连接了,如图:

由于我们是使用模拟器连接,所以图上第一项最好选上,不然模拟器即使连接上了也是没有画面的。如果还是没有画面,那可能是因为屏幕捕捉程序“yosemite.apk”没有下载到模拟器中,在Airtest中找出来,直接拖动到模拟器中,再次连接模拟器,打开一看,如图:

成功连接上了。下面就上面三个选项跟大家简单描述下:

use javacap:#解决IDE中手机画面黑屏的问题
use ADB orientation :#解决IDE中屏幕旋转的问题
use ADB touch:#解决IDE中屏幕无法点击的问题

2.连接WIndows桌面应用

这里我们不光可以和模拟器建立连接,还可以和我们已打开或者未打开的应用进行连接操作,我们可以点击选定窗口,选择指定的应用程序,这样程序就会被加载到Airtest中去了,这里我打开了360浏览器,如图:

可以看到被加载进去了,我们可以在里面浏览了,但是此时我们的桌面上的浏览器却不翼而飞,这就是因为Airtest正在使用我们的浏览器,当我们点击断开当前设备就可以关闭掉这个设备,此时便可以重新看到浏览器又回到了我们的桌面了,如图:

2.Android真机连接Airtest

虽然模拟器很方便,但是毕竟很麻烦,而且万一你的电脑配置不行的话,那么模拟器可能开不了几个应用就爆了,所以这里我们也要使用手机来连接Airtest,手机相比其它的连接方式略显复杂,下面请看我表演。

1).设置开发者相关选项

首先我们需要将数据线插入电脑的USB接口,然后还是打开开发者选项和USB调试;只不过手机可不像模拟器,除了以上选项要设置之外,我们还需要设置默认USB配置,并把它设为MIDI,默认USB配置就在USB调试的下方,如图:

然后选择MIDI,如图:

这样手机端的开发者选项设置算是全部完结了,但是这样还是远远不够的,你还需要一大堆操作,是的,没错,一大堆,这款IDE最大的毛病就在这,正是验证了一句话,安装两小时,编程两分钟,哈哈哈哈。

2).安装手机相关驱动程序

因为小编手机是Vivo的,所以小编在网上下了一个Vivo的驱动程序包,如果你的手机跟小编不是一个版本,那么请看下面:

三星: http://www.samsung.com/cn/support/downloads
华为: http://consumer.huawei.com/minisite/HiSuite_cn/
小米: http://bigota.d.miui.com/tools/xiaomi_usb_driver.rar
Vivo: http://zs.vivo.com.cn/download.php
魅族:http://care.meizu.com/
一加:http://service.oneplus.cn/
华硕: http://www.asus.com.cn/support/
联想: http://www.lenovocare.com.cn/default.aspx
LG: http://www.lg.com/us/support/software-firmware-drivers
索尼: https://developer.sony.com/develop/drivers/
摩托罗拉: https://mobilesupport.lenovo.com/us/en/solution/MS88481
HTC: http://www.htc.com/us/software/htc-sync-manager/
谷歌: https://developer.android.com/studio/run/win-usb.html
黑莓: https://swdownloads.blackberry.com/Downloads/entry.do?code=4EE0932F46276313B51570F46266A608
戴尔: http://www.dell.com/support/home/us/en/04/Products?app=drivers&lwp=rt
宏基: https://www.acer.com/ac/en/US/content/drivers

如果上面还是没有,那么你可能需要一款兼容所有设备的驱动软件,驱动人生或者驱动精灵,随意挑选一个即可。

3).配置输入法和模拟位置

如果我们在Airtest中要输入文字的话,使用手机自带的输入法是没办法输入的,必须使用我们前面提到的“yosemite”输入法,这里在我们安装好手机的驱动后会自动下载到你的手机的,你只需要安装即可。如图:

然后我们再设置系统默认输入法为这个输入法即可,如图:

虽然设置好了后我们可以输入文字了,但是有时候的话可能鼠标点击的不是很准确,那么这个时候,我们还需要设置模拟位置,同样在开发者选项中,如图:

这样设置好后,回到我们的Airtest主界面,我们就可以看到已经出现了设备的名称和状态了,如图:

4).连接设备

还是如模拟器一样,点击Connect 勾选Use Javacap,这时设备就已经成功连接上了,如图:

5).无线连接Android真机

这里我们无需准备数据线也可以连接上我们的安卓机,只要你三个步骤完成好了,就简单了。我们首先需要知道安卓真机的IP地址,可在这里查看,如图:

然后我们使用这个IP地址在Airtest中建立连接,如图:

注意这里的端口号是5555,如果你写其它的端口的话也可以运行,但是它是无法监听TCP/IP信息的,如果你想指定多个这样的端口,命令提示符输入如下命令即可:

adb tcpip 666#开启666端口

这里有个前提,就是手机必须和我们IDE所处在同一个Wifi网络环境下才行,否则是访问不到的。

6).使用脚本连接

这里我们双击脚本编辑窗,设置一个编辑器的脚本文件,如下:

设置完毕后返回即可看到如下画面:

然后我们就可以在这里面连接安卓机了,具体代码如下:

connect_device('Android://127.0.0.1:5037/手机IP地址:5555')#前面是本机号和端口后面就是你手机的IP地址了

请大家注意,这里同样需要安卓机子和IDE处在同一个WiFi网络环境下哦。

总结

今天我们讲的是这款自动化工具的安装和界面功能的剖析,这个工具整体上来说,用法比较简单,就是安装坑太多,新手小白可能要花一些时间才能整明白,在此特与大家分享,愿大家学习之路更加平坦顺畅。下次我们再来讲讲IDE的妙用。

手机自动化测试IDE—–Airtest基本操作方法

大家好,我是IT共享者,人称皮皮。这篇我们来讲讲手机自动化测试IDE—–Airtest。

前言

前面我们讲到了Airtest的界面和安装技巧,今天我们就来说说Airtest的具体操作方法吧,让我们轻松实现软件自动化,真正解放我们的双手吧。

一、基本API介绍

我们在做自动化脚本的时候,每个生成的脚本文件会给我们自动生成一些代码,如图:

手机自动化测试IDE-----Airtest基本操作方法

这里所导入的模块其实就是跨平台的API,除了跨平台的API还有平台特定的API,比如:

airtest.core.android #安卓平台
airtest.core.ios   #苹果平台
airtest.core.win   #Windows平台

这里我们来详细说说这些模块。

1.跨平台API模块

这里我们要介绍的第一个就是跨平台模块:

from airtest.core.api import * #导入所有方法

1).初始化设备

这里初始化设备我们也有两种方案,下面请看:

1)).根据设备的UUID来初始化

语法格式:

init_device(platform='Android',uuid='',cap_method=JAVACAP for Android)
#平台 – Android,IOS或Windows
#uuid –目标设备的uuid,例如,用于Android的serialno,用于Windows的handle,用于iOS的uuid
#kwargs –可选的平台特定关键字args,例如cap_method = JAVACAP for Android

下面我们来列举一下实例,如下:

init_device(platform='Android',uuid='127.0.0.1:62001',cap_method='JAVACAP')
2)).根据设备的URL来初始化

语法格式如下:

android:///   连接当前安卓设备
android://adbhost:adbport/serial NO.?cap_method=javacap&touch_method=adb
windows:///    连接本地桌面程序
ios:///     连接IOS设备

这里我们主要是传入了ADB地址,端口和连接的夜神模拟器的序列号而连接上的。具体例子如下:

connect_device('android://127.0.0.1:5037/127.0.0.1:62001?cap_method=javacap&touch_method=adb')

2).返回当前活动设备

device()
手机自动化测试IDE-----Airtest基本操作方法

3).设置当前活动设备

有时候如果我们连接了多个设备,我们需要切换的话,就是用这个函数来达到目的,可以使用设备的索引或者设备的序列号来进行切换哦。

set_current(0)
set_current('127.0.0.1:62001')

4).运行环境配置

auto_setup(basedir = None,devices = None,logdir = None,project_root = None,compress = 0 )
basedir 设置当前脚本的所在位置,__file__也可以。
devices 指定运行脚本的设备以列表形式存在
logdir 设置脚本运行时的日志保存路径,默认为None,设为True可保存
project_root  设置api的项目根目录

5).开启并执行远程Shell命令

shell(cmd) #ls / data / local / tmp

6).在设备上启动程序

start_app('启动的应用程序包名')

7).在设备上停止程序

stop_app('启动的应用程序包名')

8).清除设备上的应用程序数据

clear_app('启动的应用程序包名')

9).在设备上安装应用程序

install(filepath='要在目标设备上安装的文件的路径')

10).在设备上卸载应用程序

uninstall('应用程序包名')

11).截图并保存到文件中

snapshot(filename='1.jpg',msg='hello',quality=3)
filename:图片名
msg:屏幕截图的简短描述
quality:图像质量,范围为[1,99]的整数

12).唤醒并解锁设备

wake('设备')

13).返回目标设备的主屏幕

home('设备')

14).设备屏幕上执行点击,滑动,捏,按键,输入操作

click(v=Template(x,y),times=2) #单击
v:触摸目标,可以是Template实例,也可以是绝对坐标(x,y)
times:执行多少次触摸


double_click() #双击
swipe(v1,v2)#滑动起点和终点
swipe(v1,vector=(x,y))#沿向量移动,向量可以是坐标也可以是屏幕百分比
#返回值:原点位置和目标位置


pinch()#捏操作,相当于缩放,参数如下:
in_or_out:放大或缩小
center:默认为None表示屏幕中心
percent:捏动作的屏幕比例,默认值为0.5 
keyevent(keyname='Home')#按键操作


text('文本')#在设备上输入文本

15).睡眠,等待

sleep(2)#睡眠两秒,延迟两秒
wait(v,timeout,interval,intervalfunc)#等待与设备屏幕上的模板匹配
v:等待的目标对象
timeout:超时时间
interval:尝试找到匹配项的时间间隔(秒)
intervalfunc:在每次未成功尝试找到相应匹配项后调用
返回值:匹配目标的坐标

16).检查给定目标在设备屏幕上是否存在

exists(v)
v:检查对象
如果找不到目标,则为False,否则返回目标的坐标

17).在设备屏幕上查找所有出现的目标并返回其坐标

find_all(v)
v:寻找目标
返回坐标列表

18).断言操作

assert_exists(v,msg) #断言目标存在于设备屏幕上
assert_not_exists(v,msg) #断言目标在设备屏幕上不存在
v:要检查的目标
msg:断言的简短描述


assert_equal(v1,v2,msg) #断言两个值相等
assert_not_equal(v1,v2,msg) #断言两个值不相等
v1:第一个值
v2:第二个值
msg:断言的简短描述

这里基本上我们就把使用方法说完了,下面我们来进行下实际操作,下一篇文章即将奉上。

二、总结

这篇文章主要介绍了Airtest的基本操作方法,可以让我们轻松实现软件自动化,下一篇文章将带大家一起进行实际操作,敬请期待!

我是皮皮,如果觉得文章不错,记得三连噢。

手机自动化测试IDE —– Airtest的安装和IDE控件详解

大家好,我是IT共享者,人称皮皮。这篇文章主要给大家分享手机自动化测试IDE —– Airtest的安装和IDE控件详解相关知识,一起来看看吧。

前言

前面小编带大家讲解了一些用来做自动化的模块,但是如果是在手机上做自动化了,我们还能搞定吗?也许有人觉得抓手机的数据包都费劲,还搞什么自动化,而且肯定不简单。但我要告诉你的是,这一切都被一个叫Airtest的自动化测试软件给搞定了,你只需要把它一直运行着,你的手机上的所有操作,就都交给它了,直接就是点点点。

一、安装IDE

这里需要下载我们的Airtest,下载地址:

https://u062.com/file/7715018-451404671

下载好后我们需要安装它,然后第一次打开需要注册一个账号,必须是网易的账号,因为这个IDE就是网易开发的,所以需要登录网易的邮箱号才可以使用,安装成功后,如图所示:

二、IDE控件详解

1.Airtest辅助窗口

这里主要陈列着Airtest的所有功能函数以及Poco的功能函数,Poco是比Airtest识别率更友好的控件。如图:

touch:触屏操作


wait:等待操作


swipe:滑动操作


exists:检查屏幕上是否存在指定目标


test:在目标程序上输入文本


keyevent:按键操作


snapshot:截图操作


sleep:睡眠定时


assert_exists:存在断言的目标


assert_not_exists:不存在断言的目标


assert_equal:断言两个值是否相等


assert_not_equal:断言两个值是否不相等

2.Poco辅助窗口

Poco主要用来做游戏辅助测试,比如自动点击的外挂等等。

这里不再详细描述,因为我们用的最多的就是Airtest。

3.脚本编辑窗口

这个窗口是用来构建并运行我们的程序,同时还支持自动生成代码。

4.Log查看窗

这个窗口是将我们每一步操作生成的日志打印在这个窗口供我们查看的,可以通过查看日志了解到程序报错的原因以及当前操作所产生的结果。

5.移动设备连接

我们可以看到IDE上显示有移动设备连接,Serial NO.代表搜索到的设备名,State代表设备状态,有三种:offine(设备未连接或者无响应),Device(设备已连接),No Device(没有设备)。刷新ADB自然是重置当前设备列表,重启ADB自然是断开所有连接并重置列表。

6.远程设备连接

这里可以连接到本地模拟器上的设备,也可以连接到远程设备,只要你有可供连接的设备。

7.Windows窗口连接

用来选择当前系统桌面应用程序的并把它们的当前行为记录下来,也可用来做自动化。

8.连接IOS设备

这个就不说,给苹果手机准备的。

9.安卓助手

这个功能挺不错的,可以很方便查看设备的方法,以及可以进行一些简单的操作,如下所示:

三、总结

这篇文章主要给大家介绍了自动化测试IDE —– Airtest的安装和IDE控件基础知识,下一篇文章小编将带大家来实际应用Airtest连接手机,给大家分享一些好玩的。

干货|Sqlite数据库知识必知必会(下篇)

大家好,我是IT共享者,人称皮皮。

前面几天给大家分享了MySQL数据库知识,没来得及看的小伙伴可以前往:Mysql查询语句进阶知识集锦,一篇文章教会你进行Mysql数据库和数据表的基本操作,关于数据库的安装可以参考:手把手教你进行Mysql5.x版本的安装及解决安装过程中的bug。

上篇文章主要给大家介绍了Sqlite数据库的安装、图形化管理系统、基本数据类型、基本关键字和数据库的相关操作,干货|Sqlite数据库知识必知必会(上篇),今天皮皮紧接上篇文章,继续给大家分享数据库知识,一起来看看吧。

前言

前面我们学习了很多数据库,虽然它们功能非常丰富,但是占用空间比较大,使得我们的系统负荷变大,这对于我们新手小白来说不是一个理想的选择,于是乎,Sqlite闪亮登场,它受人喜爱的真正原因正是因为它足够小,无需安装和管理配置,简单容易上手,支持数据库的大小也有2TB,足够我们个人开发爱好者使用了。

一、数据表相关操作

1).创建数据表

CREATE TABLE student (
ID INTEGER DEFAULT '1406061' PRIMARY KEY AUTOINCREMENT NOT NULL,
NAME NVARCHAR(100)  UNIQUE NOT NULL,
score INTEGER  NOT NULL,
time TIMESTAMP  NOT NULL
);

我们可以使用SqliteAdmin快速生成表,如下:

干货|Sqlite数据库知识必知必会(下篇)

干货|Sqlite数据库知识必知必会(下篇)

这样我们的表就建立成功了。这里小编在软件中用的是DEMO这个数据文件,而在命令窗口中用的是TEST这个数据库文件,因为一个数据库文件不允许在两个位置打开的缘故。

2).删除表

DROP TABLE people;

3).显示表名

.tables
干货|Sqlite数据库知识必知必会(下篇)

4).数据表的增删改查

1)).增加

这里我们可以给刚创建的表添加一个数据,如下:

insert into student(ID,NAME,score,time) values(1406063,'任性的90后boy',90,'2020-07-06 12:23:32');
干货|Sqlite数据库知识必知必会(下篇)

这里我插入了三行数据,其中有一行报错是因为我使用了相同的ID号,而我的数据库的ID号是不允许重复的,故而会报错,改成其它的就好了,如果你把ID设为自增的话,就不需要你去写了,这里我用到了自增,所以大家不必写Sqlite会自动填充进去的。这里也可以省掉字段名,直接写值,如下:

干货|Sqlite数据库知识必知必会(下篇)

我们还可以给表添加新列,如下;

alter table people add  column aa char(10);#添加列并且列名为aa

注:Sqlite3并不支持带有UNIQUE约束的列

2)).删除

delete from people;#删除表数据
delete from people where score<20#删除people数据表score数值小于20的记录

3)).修改

其实就是更新操作,如下;

update people set score=100 where  age=46;#当age=46时score设置为100

4)).查找

查找不管是在哪个数据库中方法都是相当多的,因为查询操作是最常见也是最频繁的,下面我们就来详细说说:

1))).查询所有的结果

select * from student;
干货|Sqlite数据库知识必知必会(下篇)

我们可以看到虽然结果打印出了,但是并不是那么美观,我们将它的打印格式化一下,如下;

干货|Sqlite数据库知识必知必会(下篇)

这下就完美多了。虽然这种方法很不错,但是如果数据列很多的话就无法完全显示了,这个时候我们就需要设置列的宽度,如下:

.width 10 20 15

2))).查询指定结果

select NAME,score from student; #打印出NAME和score列的结果
select * from people where score<20 and age<40;#当score小于20并且age小于40的时候
select *from people where score between 10 and 30;#当score为10~30之间时
select *from people where NAME LIKE '放大%';#当name的开始处含有放大
select *from people where NAME glob '放大*';#与上同
select *from where score not in(12,23);#当score不属于12~23

3))).查找排序

select * from people order by score desc; #对score降序排序

4))).查找指定数量的数据

select * from people  limit 3 offset 2#偏移2个单位然后输出三行数据,其实就是输出后三行数据

5))).查找重复数据并消除

select distinct * from people where score>10;#当score大于10的时候消除重复数据

6))).查找数据并进行分组

select NAME ,max(age) from people where score>10 group by age#返回score大于10的时候age的最大值

7))).查找数据进行分组并过滤分组

select NAME ,max(age) from people where score>10 group by age having count(NAME)>1;#名称计数大于1

5).表的重命名

alter table people rename to man;#将表名people改为man
干货|Sqlite数据库知识必知必会(下篇)

6).数据表的连接

这里的连接分为内外交叉三种连接,使用好了可以极大提高我们的工作效率。这里我们再次创建一张表,如下:

干货|Sqlite数据库知识必知必会(下篇)

1)).交叉连接

select * from people cross join woman;
干货|Sqlite数据库知识必知必会(下篇)

2)).内连接

select * from people inner join woman;

3)).外连接

select * from people outer join woman;

注:Sqlite3只支持左外连接。

7).表的复制

create table man as select * from people where 1=0;#复制表结构
create table woman as select * from people;#复制表结构和数据

8).临时表

有时候我们不需要存储所有表的数据,这个时候临时表就很有使用的必要了。如下:

#创建一个临时表
create  temporary table temp_table(
    id int primary key,
    name varchar(50) unique not null,
    age int not null
);


#查看临时表
temp.temp_table


#删除临时表
drop table temp.temp_table;

5.索引操作

1).创建索引

create index user on people(score);#在people表的score字段上设置索引
create unique name on people(NAME);#在people表的score字段上设置唯一索引
create index pa on people(score,age)#在people表的score和age字段上设置索引

2).查看索引

SELECT * FROM sqlite_master WHERE type = 'index';
干货|Sqlite数据库知识必知必会(下篇)

这里我们之前仅仅只是创建了一个索引,那就是”user“,为何会有两个索引了,而且最上面的索引好像跟我们并没有什么关系,也不像是自己创建的,其实,这个就是隐式索引,这个隐式索引在我们创建表的时候就连带着一起创建了的,只是为了让查询更加快速而已,影响不大。

3).使用索引

这里涉及到两个关键字请配套使用,表示索引来自于哪里的意思。

select * from people indexed by user where score>10;

4).删除索引

drop index user;

注:数据量较小不应使用索引,以免给系统增压。

6.视图操作

1).创建视图

create view name as select NAME from people;#创建NAME字段的视图

2).使用视图

select *from name;
干货|Sqlite数据库知识必知必会(下篇)

这样就可以直接输出视图字段的所有值了。

3).删除视图

drop view name;

7.触发器

触发器就是使得多个表的交互增强,互相调用,满足条件就调用哪个表,语法格式如下:

create trigger 触发器 after(before) insert(delete update)
on1
begin
insert into2(表2字段,表2字段,n) VALUES(表1值, 表1值,,,,n);
END;

1).创建触发器

#给people表创建一个触发器
create trigger cf
after insert on people
begin
insert into woman(w_ID,NAME,SCORE,date) values(new.ID,'向前插入',100,datetime('now'));
end;

2).查看触发器

select * from sqlite_master where type = 'trigger'AND tbl_name='people';#查看people表的触发器

3).删除触发器

drop trigger cf;

8.事务

有了事务可以让我们的Sqlite语句工作的更加有条不紊,一般大致分为事务开始 提交 回滚 结束,下面来看看:

begin;#开始
insert into people('gf',65,datetime('now'));
rollback; #回滚就是撤销
COMMIT;提交保存数据
end;#结束

这里的数据没有插入到“people”表中哦,是不是超级简单了?

二、总结

这篇文章主要介绍了Sqlite数据库的数据表、索引、视图、触发器和事务操作知识,干货满满。

皮皮自从学过Sqlite之后,就果断卸载了Mysql和Mongo了,主要是目前还用不着Mysql数据库和Mongo那么强大的数据,够用就好。

我是皮皮,如果觉得文章不错,记得三连噢,大家有问题也可以点击下方的图片,加我好友,交个朋友也好呀~

干货|Sqlite数据库知识必知必会(上篇)

大家好,我是IT共享者,人称皮皮。

前面几天给大家分享了MySQL数据库知识,没来得及看的小伙伴可以前往:Mysql查询语句进阶知识集锦,一篇文章教会你进行Mysql数据库和数据表的基本操作,关于数据库的安装可以参考:手把手教你进行Mysql5.x版本的安装及解决安装过程中的bug,今天皮皮继续给大家分享数据库知识,但是换了一个主角,它就是Sqlite。

前言

前面我们学习了很多数据库,虽然它们功能非常丰富,但是占用空间比较大,使得我们的系统负荷变大,这对于我们新手小白来说不是一个理想的选择,于是乎,Sqlite闪亮登场,它受人喜爱的真正原因正是因为它足够小,无需安装和管理配置,简单容易上手,支持数据库的大小也有2TB,足够我们个人开发爱好者使用了。

一、安装

既然要学Sqlite,首先我们先安装它们,前面我们说过,安装它们无需太多过程,即免安装,下载地址:

https://u062.com/dir/7715018-39794633-fbf2ca

我们下载好后直接将Sqlite的应用程序加入到环境变量中即可随意使用了,打开CMD,看到这种字样,表示安装成功,如图:

二、图形化界面管理

Sqlite已经安装上了,但是在命令提示符窗口操作总感觉不美观,小编想这时候应该需要一个图形界面工具来操纵Sqlite,这样就能更直观的显示数据了,这里我推荐SqliteAdmin,中文版的界面再加上简洁的界面设计,如图:

注意,此时的软件还无法正常工作,因为它还没有可以解析Sqlite语句的动态链接库,所以你还需要下载个动态链接库,这里小编已经准备好了下载地址了,下载后直接复制到软件的目录即可,下载地址:

https://u062.com/file/7715018-452195159

三、基本语法

Sqlite不像其它的数据库以“;”结尾,而且它是以“.”开头使得式子成立的。打开我们的SqliteAdmin,下面开始我们的装逼之旅。

1.数据类型

Null         空值
SMALLLINT    短整型
INTEGER      带符号的整数 这个就是布尔类型 0(false)和 1(true)
TINYINT      长整型
REAL         浮点值
TEXT         大量文本字符串
BLOB         二进制对象       
NUMERIC      使用所有五个存储类的值
VARCHAR(n)   变动长度字符串,只能存英文,最多8000个字符
CHAR(n)      固定长度字符串
DATA         年月日
TIME         时分秒
DOUBLE       双精度浮点数
FLOAT        单精度浮点数
TIMESTAMP    存储年月日时分秒
NCHAR        存储Unicode数据类型的固长字符串 ,可存英文汉字,做多4000个字符
NVARCHAR 存储Unicode数据类型的变长字符串
NTEXT        存储Unicode数据类型的大量文本字符串
DATATIME     存储日期时间

其实它的数据类型远不止这些,更多的数据类型需要大家发掘,这里小编列举只是常用的数据类型罢了。

2.基本关键字

了解了数据类型,在创建数据库时用于操作时需要配套使用的关键字当然也必须得了解,这样才能提高开发效率。

AND   




BETWEEN  最小值和最大值之间




EXISTS 判断是否存在




IN  判断某个值是否属于另一个值




NOT IN 判断某个值是否不属于另一个值




LIKE 使用通配符比较值与另一个值 不区分大小写 %(表示零个,一个或者多个)  _(表示一个)




GLOB  使用通配符将值与类似值进行比较,并区分大小写的 *(表示零个或多个)     ?(表示一个)




LIMIT  限制满足条件的值的数量




ORDER BY 排序  ASC(升序) | DESC(降序)




GROUP BY  数据聚合




HAVING   过滤分组,使用前一定要使用GROUP BY




DISTINCT   消除所有重复记录






NOT  不,常和in一起用




OR   




IS NULL  判断是否等于空值,类型运算符




IS  相当于‘=’




IS NOT  判断是否不等于 相当于“!=”




UNIQUE    不重复


UNION     消除所有重复行


UNIONALL  不消除重复行


WHERE   用于满足某个条件时


SELECT  选择


FROM   来自


INSERT INTO 插入表数据


PRIMARY Key  主列


DEFAULT 默认值


CHECK 检查

3.数据库相关操作

1).创建数据库文件

首先我们要创建一个数据库文件,以“.db”结尾的文件,如下:

我们还可以在命令提示符里面创建数据库,如下所示:

这样就创建了一个”test”的数据库文件了,我们创建之后我们就进入了”test”数据库中了,然后就可以进行其它操作了。

2).查看数据库

.database   .databases 两者即可

3).退出数据库

.quit

4).导出数据库

sqlite3 test.db .dump > test.sql

5).创建附加数据库

ATTACH DATABASE 'test1.db' as 'test1';
ATTACH DATABASE 'test2.db' as 'test2';

上述操作是将所有数据库数据都存放在了数据库文件“test.db”中了,不过实际开发中不建议这么做,建议多做几个数据库,或者将数据库嵌入到其它数据库中。

6).显示附加数据库

.database   .databases 两者即可

7).分离数据库

DETACH DATABASE 'test1';

四、总结

这篇文章主要介绍了Sqlite数据库的安装、图形化管理系统、基本数据类型、基本关键字和数据库的相关操作,介绍了创建数据库、查看数据库、退出数据库、导出数据库、创建附加数据库、显示附加数据库和分离数据库的方法,干货多多。下一篇文章继续给大家分享Sqlite数据库的数据表、索引、视图、触发器和事务操作知识,敬请期待!

浅析Python模块的引入和调用

大家好,我是IT共享者,人称皮皮。这篇文章我们来浅析Python模块的引入和调用。

一、前言

Python中的模块,有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include引入math.h这个头文件,否则是无法正常进行调用的。

那么在Python中,如果要引用一些其他的函数,该怎么处理呢?

在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。

说的通俗点 :模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块。

二、模块引入

1. import

在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。

形如 :

 import module1,mudule2...

当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。

在调用math模块中的函数时,必须这样引用:

  模块名.函数名

为什么必须加上模块名调用呢?

因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。

   import math


    #这样会报错
    print sqrt(2)


    #这样才能正确输出结果
    print math.sqrt(2)

有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以用下面方法实现:

   from 模块名 import 函数名1,函数名2....

不仅可以引入函数,还可以引入一些全局变量、类等。

注意:

  1. 这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。

2. 如果想一次性引入math中所有的东西,还可以通过from math import 来实现

2. from…import

Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。

语法如下:

   from modname import name1[, name2[, ... nameN]]

例如,要导入模块fib的fibonacci函数,使用如下语句:

   from fib import fibonacci

注意:

  • 不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci单个引入。

3. from … import *

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

   from modname import *

注意:

  • 这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

4 . 定位模块

当你导入一个模块,Python解析器对模块位置的搜索顺序是:

  1. 当前目录
  2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
  4. 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

三、as 的三种用法

1. with…as…

第一种是和with结合使用,主要用于文件的读写操作,省去了关闭文件的麻烦。

写法:

with open("文件路径","读写方式") as 赋值变量:
    #  执行代码块

实例:

#test.py
with open("1.txt") as f:
    print f.read()


#1.txt(两个文件在同一目录下)

运行结果:

 

2. 导入模块起别名

导入模块是对模块进行重命名,也就是给模块起一个别名。示例代码在下方的第三点有演示。

3. except结合使用

第一种:给traceback模块起别名为a

示例代码 :

import traceback as a
try:
    while 1/0 < 0:
        print True

第二种:和except组合使用,将捕获到的异常对象赋值给e。

实例代码 :

except Exception as e:
    print "e=",e
    a.print_exc()

四、总结

本文详细的讲解了Python基础 ( 模块 )的引入,调用 。介绍了常用的三种模块。模块时的需要注意的事项,以及在实际操作中会遇到的问题,提供了解决方案。希望可以帮助你更好的学习Python。