SQLite简易入门

本文内容来源:https://www.dataquest.io/mission/129/introduction-to-sql

本文所用数据来源:https://github.com/fivethirtyeight/data/tree/master/college-names

摘要:主要简介了SQLite的一些简易操作(增删改查)

原始数据展示(数据库facts存储了如下的这张表,主要字段描述:

code - 国家代码,name - 国家名称, area - 国土面积, created_at - 创建这个表的时间)

 

操作数据

 

查询

#数据展示

SELECT [columnA, columnB, ...]

FROM tableName;

#如: 查询数据库中code和name两列的数据

SELECT code, name

FROM facts;

#条件查询,使用where来界定查询条件,如,查询人口大于1亿的国家代码和名称

SELECT code, name

FROM facts

WHERE population> 100000000;

在where语句中可以使用的比较符号:

  • 小于: <
  • 小于或等于: <=
  • 大于: >
  • 大于或等于: >=
  • 等于: =
  • 不等于: !=

sqlite中可以直接对日期数据进行比较,譬如,查询在2015-11-01 14:00之前创建的数据

SELECT * FROM facts 

WHERE created_at < "2015-11-01 14:00"

注意:在双引号中就是日期格式的数据,必须按照yyyy-mm-dd HH:MM:SS的格式

 

限定返回的数据数量

# 有时候只想查看返回数据的前几条,使用limit, 如:查询前五条数据

select * from facts limit 5;

 

逻辑运算符

可以使用逻辑运算符and和or来组合多重查询条件

SELECT [column1, column2,...] FROM [table1]

WHERE [condition1] AND [condition2]

#如,人口大于1亿且国土面积大于100000的国家名称

select name from facts where population> 100000000 and area_land> 100000 limit 10;

 

组合多个查询条件

#如:查询在人口过亿的国家中,出生率大于20或者死亡率小于10的数据

select name

from facts

where (population >100000000) and (birth_rate  > 20 or death_rate < 10);

 

排序

通过order by语句来指定排序的列,asc是升序,desc是降序

SELECT [column1, column2,...] FROM [table1]

WHERE [conditions]..

ORDER BY column1 [ASC or DESC]

# 按国家名称降序排序

select name from facts order by name desc limit 10;

#多列排序,譬如,在一个存储人名的表中,首先对姓排序,然后在同一个姓中再对名排序

select [column1, column2..]

from table_name

order by column1 (asc or desc), column2 (asc or desc)

 

查询一张表的数据类型,sqlite中主要有以下的数据类型:

  • INTEGER - 类似于python中的整型类型
  • REAL - 类似于python中的浮点数类型
  • FLOAT - 类似于python中的浮点数类型
  • TEXT - 类似于python中的字符串类型
  • VARCHAR(255) - 类似于python中的字符串类型

之所以同一个类型有不同的名字,是因为sqlite用来兼容其他数据库所用的,查询一张表的数据类型,使用pragma语句

PRAGMA table_info(tableName);

#结果会返回一个列表(截取):

[[0, "id", "INTEGER", 1, null, 1], [1, "code", "varchar(255)", 1, null, 0], [2, "name", "varchar(255)", 1, null, 0]]

该列表的内容内容如下,pk = 1表明该字段是一个主键:

 

插入

往数据库中插入数据,使用insert语句,注意日期数据必须符合格式:yyyy-mm-dd HH:MM:SS

INSERT INTO tableName

VALUES (value1, value2, ...);

#例子:

INSERT INTO facts

VALUES (262, "dq", "DataquestLand", 60000, 40000, 20000, 500000, 100, 50, 10, 20, "2016-02-25 12:00:00", "2016-02-25 12:00:00");

如果要插入的数据中有空值,就用NULL代替即可

 

更新

UPDATE tableName

SET column1=value1, column2=value2, ...

WHERE column1=value3, column2=value4, ...

# 例如,将United States改为DataquestLand

update facts

set name=‘DataquestLand‘

where name=‘United States‘;

 

删除

DELETE FROM tableName

WHERE column1=value1, column2=value2, ...;

# 例如,将名为Canada的数据全部删除

delete from facts

where name=‘Canada‘;

 

使用python和sqlite交互

sqlite数据库并不需要开启一个单独的服务器进程,并且把所有的数据都存储在硬盘上的一个文件中,从python2.5开始,sqlite就集成在了python语言中,所以不需要额外安装库来操作sqlite

 

连接数据库

import sqlite3

conn = sqlite3.connect(‘countries.db’) #使用connect()方法来连接数据库,该参数指定数据库的名称

 

python是通过cursor对象来操作sql语句的,cursor对象可以执行如下功能:

  • 查询数据库
  • 解析从数据库返回的结果
  • 将数据库的返回结果转化为python对象
  • 将cursor的值保存为本地变量

注意:cursor对象把返回的结果保存到一个元组的列表中,如下

import sqlite3

conn = sqlite3.connect("countries.db")       # 连接数据库

cursor = conn.cursor()                # 返回一个cursor对象

query = ‘select name from facts;‘  # 将查询语句保存为字符串格式

cursor.execute(query)                # 执行查询语句

names = cursor.fetchall()              # 保存全部的返回结果

print(names[0:2])                   # 显示前两个数据

#结果:一个列表,列表中的每个元素是一个元组

[(‘Afghanistan,), (‘Albania‘,)]

有时候可能需要逐条返回查询结果,就是用fetchone(),需要一次返回n条结果,就是用fetchmany(n)。因为在cursor对象中会保存一个内部的计数器,在每次得到返回结果时都会增加计数器

# 上面的查询语句等价于这样

import sqlite3

conn = sqlite3.connect("countries.db")       # 连接数据库

cursor = conn.cursor()                # 返回一个cursor对象

query = ‘select name from facts;‘  # 将查询语句保存为字符串格式

cursor.execute(query)                # 执行查询语句

names = cursor.fetchmany(2)              # 保存前2条结果

print(names)

在某个进程连接着一个sqlite数据库的时候,其他进程是不能访问该数据库的,所以在操作完数据库之后需要关闭连接,注意,在关闭连接的时候,之前对数据库的更改会自动保存并生效。

conn = sqlite3.connect("countries.db")

conn.close()

 

 

操作表结构

上面的内容都是对表中的数据进行操作,现在要对表的结构进行操作,譬如创建新表,增加一列等

增加列

# 往一张表中增加一个新列

ALTER TABLE tableNAme

ADD columnName dataType;

# 例如,往该表中增加一列名为leader,且数据格式为text

alter table facts add leader text;

 

创建新表

CREATE TABLE dbName.tableName(

   column1 dataType1 PRIMARY KEY,

   column2 dataType2,

   column3 dataType3,

   ...

);

# 例如,在数据库factbook中创建一个新表用来保存国家领导人的信息

CREATE TABLE factbook.leaders(

   id integer PRIMARY KEY,  # 指定主键

   name text,

   country text

);

创建具有外键的表

CREATE TABLE factbook.leaders(

   id integer PRIMARY KEY,

   name text,

   country integer,

   worth float,

   FOREIGN KEY(country) REFERENCES facts(id)  # 该外键指定要连接那个表

);

 

多表联合查询

SELECT [column1, column2, ...] from tableName1

INNER JOIN tableName2  # 指定另一张表

ON tableName1.column3 == tableName2.column4;

# 譬如,查找两张表中编号一致的数据

SELECT * from landmarks

INNER JOIN facts

ON landmarks.country == facts.id;

# 除了INNER JOIN还有LEFT OUTER JOIN(左外连接)

在上面的例子中,landmarks是在左边的表,facts是在右边的表,在执行JOIN的时候,会变成这样

红线左边的就是landmarks表的值,右边就是facts表的值,因为id和name两个字段都重复了,所以右边的表会加上后缀1

  • INNER JOIN - 只展示符合查询条件的值,在上图中就是左边的country值等于右边id_1的值的那些行
  • LEFT OUTER JOIN - 左表中有不匹配的数据时,在合并的表中的其他字段就显示为NULL

关于JOIN,更多资料参考:http://www.yiibai.com/sqlite/sqlite_using_joins.html

时间: 2024-11-05 20:27:13

SQLite简易入门的相关文章

《逻辑思维简易入门》(第2版) 阅读笔记二

<逻辑思维简易入门>(第2版) 阅读笔记二 本周阅读的是<逻辑思维简易入门>的第三章,也就是说,本书的第一部分就已经读完了. 第三章.信念的优点 信念和负信念是人们在接受一个事物时一种心理态度,延伸来说也就是对事物的认知态度.因为我们在研究 逻辑思维的时候,都有一个前提:“以正常情况以及说话者真诚”,所以有人如果对于一件事物不做回应,我们可以认为这是一种既不相信,也不怀疑的的态度. 信念的优缺点有很多,在书中主要介绍了下面几种: 1.准确性 好的信念实在准确的表达事实,同样真的信念

Web压力测试工具 LoadRunner12.x简易入门教程--(一)回放与录制

LoadRunner12.x简易入门教程--(一)回放与录制 今天在这里分享一下LoadRunner12.x版本的入门使用方法,希望对刚接触LoadRunner的童鞋有所帮助. LoadRunner12的组成分为三部分,分别是:Virtual User Generator.Controller.Analysis 首先要介绍的是用Virtual User Generator做一个最简单的录制与回放. 打开软件后,界面如下,通过左上角的菜单,我们来新建一个脚本 由于现在Web项目比较多,这里也就用W

php读取sqlite数据库入门实例

php读取sqlite数据库的例子,php编程中操作sqlite入门实例.原文参考:http://www.jbxue.com/article/php/22383.html在使用SQLite前,要确保php.ini中已经启用sqlite和pdo配置 打开PHP.INI文件,打下以下扩展:extension=php_pdo.dll extension=php_pdo_sqlite.dllextension=php_sqlite.dllsqlite_open命令是打开一个数据库文件. 如果没有文件则创

SQlite数据库入门

要学好SQLite,首先要先了解他的优缺点,可以干什么,才更有兴趣学下去,网络上翻了一下资料大概了解到(随便翻的资料,自己总结,可能有错误的地方) 1-他是一个轻量级的,貌似只要带上一个动态库,就可以用sql的大多数命令来操作一个数据(库),而不用安装复杂如oracle之类的服务器端和客户端,动态库的大小好像是487k; 2-免安装,绿色~带上她的动态库,即可完成数据库的功能(貌似跟access的mdb查不多??); 3-单一文件,所有数据和格式都包含在一个文件中,我们不用去管他到底里面复杂得怎

哈希表简易入门

什么是哈希表 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做哈希函数,存放记录的数组叫做哈希表.哈希表作为一种高效的数据结构,有着广泛的应用.如果哈希函数设计合理,理想情况下每次查询的时间花费仅仅为 O(h/r),即和哈希表容量与剩余容量的比值成正比.只要哈希表容量达到实际使用量的大约 1.5 倍以上,查询花费的时间基本就可以认为恒为 O(1).

Pandas简易入门(二)

目录:     处理缺失数据     制作透视图     删除含空数据的行和列     多行索引     使用apply函数   本节主要介绍如何处理缺失的数据,可以参考原文:https://www.dataquest.io/mission/12/working-with-missing-data 本节要处理的数据来自于泰坦尼克号的生存者名单,它的数据如下 pclass,survived,name,sex,age,sibsp,parch,ticket,fare,cabin,embarked,bo

小鹤双拼鹤形简易入门-by小鹤双拼输入法QQ群用户-弧

更新时间:2013-5-30 鹤形简易入门 1.完整的小鹤双拼,由其双拼方案和双形组成,任何单字的全码长度均为四,前两码为声母和韵母(这就是大家已经学会了的纯双拼部分),后两码为双形.2.基本规则:双形的两码分别取一个字的首字根和末字根. 举例:型=xkkt,前两码xk为拼音,后两码kt为双形(k表示首字根"开",t表示末字根"土") 注意:大部分的字根都是取的拼音,所以不用死记哦.例如:草头"艹"=C,扶手旁"扌"=F,走之

T-SQL语句简易入门

在微软官方,有一篇介绍T-SQL语句的教程,非常好理解,完全可以帮助新手入门,了解常用SQL语句的使用语法,而且又不涉及较为复杂的操作.不用安装示例数据库AdventureWorks.下面是教程里内容的摘录. T-SQL,也就是Transact-SQL,是微软对SQL标准的实现.(说明:以下的T-SQL语句均在查询编辑器中书写.执行) 1. 创建数据库TestData CREATE DATABASE TestData GO 鼠标选中“CREATE DATABASE”,按F1,会调出“CREATE

SQLite使用入门

什么是SQLite SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准.SQLite在使用前不需要安装设置,不需要进程来启动.停止或配置,而其他大多数SQL数据库引擎是作为一个单独的服务器进程,被程序使用某种内部进程通信(典型的是TCP/IP),完成发送请求到服务器和接收查询结果的工作,SQLite不采用这种工作方式.使用SQLite时,访问数据库的程序直接从磁盘上的数据库文件读写,没有中间的服务器进程.使用SQLite一般只需要带上一个dll,就可以使用它的全部功能. SQL