——————开始——————
轻量级数据库,甚至可以直接在内存里面创建表,数据内容是存储在.db后缀的文件中
可视化软件:https://sqlitebrowser.org/dl/
语法和MYSQL有区别
cast(xx as signed) -- > cast(xx as Integer )
datediff(from_date, to_date) --> JulianDay(from_date) - JulianDay(to_date)
if --> iif
concat --> aa || bb || cc
sqlite3 python内置的数据库包
支持哪些内置函数和开窗函数,官网介绍:https://sqlite.org/lang_corefunc.html
用mysql的语句移植过去 通过python调用execute的时候 遇到有括号的函数,基本都报错
建表的语句比如:create table temp1 ( select * from data_table ); 这句话无法运行
后来改成 create table temp1 as select * from data_table 可以执行
但是如果需要执行分组或者开窗函数,rank() over (partition by xx, order by yy ) 就开始报错,后来发现他的window function 和mysql有区别,partition部分
参考 https://sqlite.org/windowfunctions.html#biwinfunc 搜partition
SELECT x, y, row_number() OVER win1, rank() OVER win2 FROM t0 WINDOW win1 AS (ORDER BY y RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), win2 AS (PARTITION BY y ORDER BY x) ORDER BY x;
-- 遇到的问题----
开窗函数报错,比如rank() over (partiion by ) syntax error
发现版本是旧的 version 2.6 但是运行python, import sqlite3, sqlite3.sqlite_version 显示的是3.21,看网上发布的版本是2017年的,
但开窗函数windows function是在2019年才支持,发现github的source code,最后更新时间是到2018年,此时电脑装的是python3.6 ,
应该和新的sqlite3不兼容,故需要升级python到3.8版本,注意python3.9不支持window7和以前的版本,所以下载的是3.8
table is locked, 如果在上一步在往某个表写入数据
此时python进入下一环节,但数据库事务transaction没有处理好,就会这样,需要修改sqlite3的设置,等待一个数据写入的处理时间,事务完成后继续现在的查询
——————结尾——————
浙公网安备 33010602011771号