SQLite:修订间差异
无编辑摘要 |
|||
第1行: | 第1行: | ||
SQLite是遵守ACID的[[关系数据库]]管理系统,它包含在一个相对小的[[C]]程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。 | SQLite是遵守ACID的[[关系数据库]]管理系统,它包含在一个相对小的[[C]]程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。 | ||
SQLite遵守ACID,实现了大多数[[SQL]] | SQLite遵守ACID,实现了大多数[[SQL]]标准。它使用动态的、弱类型的SQL语法。SQLite的代码和文档都置于[[公有领域]],任何人可以免费自由的用于商业和非商业。 | ||
==简介== | ==简介== | ||
第10行: | 第10行: | ||
*2004年06年18日,发布SQLite 3.0.0 | *2004年06年18日,发布SQLite 3.0.0 | ||
*2019年10日10日,发布SQLite 3.30.1 | *2019年10日10日,发布SQLite 3.30.1 | ||
==数据类型== | |||
所有存入SQLite数据库的值都被保存为下表5中类型之一: | |||
{| class="wikitable" style="width: 100%; | |||
|- | |||
! SQLite类型 | |||
! 描述 | |||
! 从Python类型转入 | |||
! 默认转换为Python类型 | |||
|- | |||
| NULL | |||
| 空值 | |||
| None | |||
| None | |||
|- | |||
| INTEGER | |||
| 整数,根据值的大小存储,最大8字节,即最大2^63-1=9223372036854775807。 | |||
| int | |||
| int | |||
|- | |||
| REAL | |||
| 浮点数, 存储为 8 字节的 IEEE 浮点数字。 | |||
| float | |||
| float | |||
|- | |||
| TEXT | |||
| 文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 | |||
| str | |||
| 取决于 text_factory , 默认为 str | |||
|- | |||
| BLOB | |||
| 二进制值,直接存储,不经过转换,如存储图片等。 | |||
| bytes | |||
| bytes | |||
|} | |||
布尔值在SQLite没有单独的存储类,使用INTEGER类的0 (false) 和 1 (true)存储。 | |||
一般数据库每列数据为固定类型,但SQLite中可以将不同类型数据存储到同一列。为了最大化与和其他SQL数据库引擎之间的兼容性,SQLite使用一种"类型亲和性"(Type Affinity)概念。列的亲和类型是指该列的主要数据类型,当能够转化为该数据类型就转化,不能转化就按原数据类型存储。 | |||
{{了解更多 | |||
|[https://www.sqlite.org/datatype3.html SQLite文档:SQLite 3 数据类型] | |||
|[https://docs.python.org/zh-cn/3.8/library/sqlite3.html#sqlite-and-python-types python文档:sqlite3-SQLite 与 Python 类型] | |||
|[https://www.sqlite.org/limits.html SQLite文档:限制列表] | |||
}} | |||
==日期和时间== | |||
SQLite也没有单独的日期时间数据类型,而是通过内置的时间日期函数,使用TEXT, REAL, 或INTEGER数据类型保存值。如下: | |||
* TEXT,ISO8601格式的字符串 "YYYY-MM-DD HH:MM:SS.SSS" | |||
* REAL,以Julian day numbers(公元前4713年1月1日中午12点)为起点开始计算,整数部分是天数,小数部分是当天时间数。 | |||
* INTEGER,unix时间戳,以1970-01-01 00:00:00 UTC为起点计算。 | |||
2020年10月19日 (一) 07:05的版本
SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。
SQLite遵守ACID,实现了大多数SQL标准。它使用动态的、弱类型的SQL语法。SQLite的代码和文档都置于公有领域,任何人可以免费自由的用于商业和非商业。
简介
时间轴
- 2000年8月17日,发布初始版本SQLite 1.0
- 2001年09年28日,发布SQLite 2.0.0
- 2004年06年18日,发布SQLite 3.0.0
- 2019年10日10日,发布SQLite 3.30.1
数据类型
所有存入SQLite数据库的值都被保存为下表5中类型之一:
SQLite类型 | 描述 | 从Python类型转入 | 默认转换为Python类型 |
---|---|---|---|
NULL | 空值 | None | None |
INTEGER | 整数,根据值的大小存储,最大8字节,即最大2^63-1=9223372036854775807。 | int | int |
REAL | 浮点数, 存储为 8 字节的 IEEE 浮点数字。 | float | float |
TEXT | 文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 | str | 取决于 text_factory , 默认为 str |
BLOB | 二进制值,直接存储,不经过转换,如存储图片等。 | bytes | bytes |
布尔值在SQLite没有单独的存储类,使用INTEGER类的0 (false) 和 1 (true)存储。
一般数据库每列数据为固定类型,但SQLite中可以将不同类型数据存储到同一列。为了最大化与和其他SQL数据库引擎之间的兼容性,SQLite使用一种"类型亲和性"(Type Affinity)概念。列的亲和类型是指该列的主要数据类型,当能够转化为该数据类型就转化,不能转化就按原数据类型存储。
日期和时间
SQLite也没有单独的日期时间数据类型,而是通过内置的时间日期函数,使用TEXT, REAL, 或INTEGER数据类型保存值。如下:
- TEXT,ISO8601格式的字符串 "YYYY-MM-DD HH:MM:SS.SSS"
- REAL,以Julian day numbers(公元前4713年1月1日中午12点)为起点开始计算,整数部分是天数,小数部分是当天时间数。
- INTEGER,unix时间戳,以1970-01-01 00:00:00 UTC为起点计算。
Python中使用
Python标准库 sqlite3
Python2.5及以上版本内置了sqlite3模块,在Python中使用SQLite,不需要安装任何东西,直接使用。sqlite3 模块由 Gerhard Häring 编写。它提供了符合 DB-API 2.0 规范的接口,这个规范是 PEP 249。
了解更多 >> Python文档:Python标准库-sqlite3
使用pandas函数操作数据库
Pandas提供了一些数据库接口函数,使用方便。pandas操作SQLite数据库默认使用python的sqlite3模块。
read_sql()函数
to_sql()函数
了解更多 >> pandas 文档:IO接口 sql-queries
可能出现问题
- 问题:OperationalError: database is locked
可能由于前面使用写入数据库的连接没有关闭。使用后关闭 Connection 对象,比如前面设置Connection 对象实例的名称conn,调用conn.close()即可。