Mindee

主要记录各种包的使用代码例子, 遇到问题的处理方式 项目记录更新全部代码

  博客园  :: 首页  :: 新随笔  ::  ::  :: 管理

——————开始——————

 

轻量级数据库,甚至可以直接在内存里面创建表,数据内容是存储在.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的设置,等待一个数据写入的处理时间,事务完成后继续现在的查询

 

 

 

 

 

 

 

 

 

 

 

——————结尾——————

posted on 2021-01-19 17:43  Mindee  阅读(279)  评论(0)    收藏  举报