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 | import sqlite3 |
注意到上面何时使用cursor,何时使用connect。在帮助手册可以看到
1 | builtins.object |
connection
和cursor
都是内置对象。而且很多命令都是重复的,可以看到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})
最近几个月不知道是不是因为冬天太冷了,还是啥,学习没什么激情。虽然学的很乱,东一点西一点,不过不管怎么说,只要还在学习,就是不错的。不管学的有用没用,总在进步嘛
听了这么多的歌,很多歌听着听着就腻了,不过王大毛的歌声始终听不腻。总能从歌声中听到青春的热情,活力。有什么不开心的事也就不会觉得不开心了。