sqlite3

美好的回忆不一定就是值得留恋的,有些回忆看似美好,实则每次想起都会锋利的像一把匕首,留下伤痕。

sqlite

本来是准备看python的,看着那些基础觉得没什么意思。就看看数据库连接,刚好看到sqlite,突然觉得有点意思。然后我觉得我又回到了大一,浑身充满了动力,不过很可惜,这些sql语句都是差不多的。所以说热情少了不少,不过很多高级知识点我还没真的搞懂,就借着这次学习sqlite,一起掌握了吧。

不管怎么说,对于sqlite的作者,我都觉得不可思议,该是怎样的一个人能写出这么小的数据库,但是功能却是那么强大。想想几个G的Oracle,和几十M的mysql,sqlite却只有几M。太可怕了

学习网址

链接

安装

linux就不用了,因为自带。windows安装的话有点麻烦,需要下载两个东西,一个tool一个dll。其实也没那么复杂,只是我不知道为什么要把这两个分开,放一块是不是简单点?

优点

SQLite is an open-source, zero-configuration, self-contained, stand-alone, transaction relational database engine designed to be embedded into an application.

那么也就就没有密码用户这些的了。

使用

和mysql不同的是,sqlite的操作很多都是基于命令行的。当然用软件来连接sqlite也不是不可以,但是很多有用的命令就用不了。比如说查看数据库使用命令.databases。而我还没找到如何使用sql语句查看数据库的。

  • sqlite有许多命令,这些命令以点开头。使用.help查看命令
  • 所有sql语句以分号结尾(和其它sql一样)
  • sqlite有两种使用模式,第一种直接在终端输入sqlite3。这样进入sqlite后的所有数据(建表,插入数据等等)都是在内存中的,并不会保存到硬盘上
  • 第二种sqlite3 somedatabasename.db。这样就会在当前目录下生成一个数据库文件,之后的数据会保存到硬盘上

常用命令

.help列出所有命令

.help command查看具体命令帮助

.databases查看所有数据库

.tables查看表

.head on查询结果显示表头(字段名)

.mode columns查询结果显示间隔整齐一些

.mode insert查看数据的sql(insert)语句

.schema tablename查看建表语句

python使用sqlite3

不写sql语法了,因为和mysql,oracle的差不多。其实关系型数据库的语法大部分都一样,不同的地方大多在于函数不同吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sqlite3


conn = sqlite3.connect(':memory:') # 使用内存,不保存到硬盘
# 或者
conn = sqlite3.connect('tett.db') # 不使用内存,保存到硬盘

c = conn.cursor() # 获取游标

c.execute("sql语句") # 执行sql语句,语句有多行时,使用三个引号

c.fetchone() # 获取一行数据
c.fetchmany(num) # 或者num行数据
c.fetchall() # 获取所有查询到的数据

conn.commit() # 提交

conn.close() # 关闭数据库连接

注意到上面何时使用cursor,何时使用connect。在帮助手册可以看到

1
2
3
4
5
builtins.object
Connection
Cursor
PrepareProtocol
Row

connectioncursor都是内置对象。而且很多命令都是重复的,可以看到connection也有commit方法,但是后面注明了不是标准语法。cursor才是标准做法,所以语句的执行是使用的cursor

另外,我们的sql语句实际情况并不是固定的,而是需要使用python变量传递参数

传参的三种方式(其实正确的只有两种):

  • {}使用.format函数

    1
    c.execute("insert into sometable values('{}','{}','{}')".format(variable1,variable2,variable3))

    这种方式不好,容易导致sql注入攻击,原因是因为''容易导致闭合语句。所以不建议使用

  • ?使用tuple元组

    1
    c.execute("insert into sometable values(?,?,?)",(variable1,variable2,variable3))
  • :使用dictionary字典

    1
    c.execute("insert into sometable values(:var1,:var2,:var3)",{'var1':variable1,'var2':variable2,'var3':variable3})

最近几个月不知道是不是因为冬天太冷了,还是啥,学习没什么激情。虽然学的很乱,东一点西一点,不过不管怎么说,只要还在学习,就是不错的。不管学的有用没用,总在进步嘛

听了这么多的歌,很多歌听着听着就腻了,不过王大毛的歌声始终听不腻。总能从歌声中听到青春的热情,活力。有什么不开心的事也就不会觉得不开心了。