sqlite相关
前言
本文记录一些sqlite相关笔记,随时更新。
正文
- 时间函数
- datetime()
-- 当前时间 2022-03-24 17:32:43
select datetime('now'); --2022-03-24 09:32:57
select datetime('now', 'unixepoch'); --1970-01-29 11:14:22
select datetime('now', 'utc'); --2022-03-24 01:34:34
select datetime('now', 'localtime'); --2022-03-24 17:35:05
select datetime('now', 'localtime', '-1 day'); --2022-03-23 17:35:05
- strftime()
-- 格式化字符串到指定格式
select strftime("%Y-%m-%d","2023-02-08 14:33:03"); --2023-02-08
-- 获取毫秒时间戳
select strftime('%s', '2023-02-13','utc')||substr(strftime('%f', '2023-02-13','utc'), 4); --1676217600000(2023-02-13 00:00:00)
select strftime('%s', '2023-02-13','localtime')||substr(strftime('%f', '2023-02-13','localtime'), 4); --1676275200000(2023-02-13 16:00:00)
select strftime('%s', '2023-02-13')||substr(strftime('%f', '2023-02-13'), 4); -- 1676246400000(2023-02-13 08:00:00)
- date()
--与datetime几乎相同,不过输出仅仅精确到天
select date("now","localtime"); --2023-02-08
select date("now","localtime","-1 days"); --2023-02-07
select date("now","unixepoch"); -- 1970-01-29
- random()
-- 在一定规则下得到了数据集,将数据集随机排序,然后选择第一条数据
-- 这样的好处是满足某种条件下打乱查询结果的排列顺序;缺点是适合小范围数据集,频繁使用ORDER BY RANDOM()可能会导致性能问题,因为数据库需要为每一行生成一个随机数,然后基于这些随机数进行排序,这在大型数据集中会非常消耗资源。
SELECT * FROM table_name WHERE id > target_id ORDER BY RANDOM() LIMIT 1;
字符串截取
函数:substr(string string,num start,num length)
用法:
string为字符串;
start为起始位置;字符串的第一个字符的位置为1,不是从0开始计算
length为长度。
参考:sqlite 截取字符串函数substr获取字符串长度
length()
参考:SQLite 常用函数字符串拼接
"aaa"||"bbb"支持regexp正则表达式
参考:python sqlite3 支持REGEXP语句 正则表达式 regular expression
import sqlite3
import re
def regexp(expr, item):
reg = re.compile(expr)
return reg.search(item) is not None
conn = sqlite3.connect(':memory:')
conn.create_function("REGEXP", 2, regexp)
cursor = conn.cursor()
cursor.execute('CREATE TABLE foo (bar TEXT)')
cursor.executemany('INSERT INTO foo (bar) VALUES (?)',[('aaa"test"',),('blah',)])
cursor.execute('SELECT bar FROM foo WHERE bar REGEXP ?',['"test"'])
data=cursor.fetchall()
print(data)
# 如果是在类中定义
def regexp(self, expr, item):
'''
正则表达式函数
@params expr: 需要搜索的正则表达式
@params item: sqlite 传入的需要搜索的内容
'''
if type(item).__name__ == "bytes":
item = item.decode()
reg = re.compile(expr)
return reg.search(item) is not None
self.conn.create_function("regexp", 2, self.regexp)
- 查询结果返回字典类型
# 在类中定义
def dict_factory(self, cursor, row):
d = {}
for index, col in enumerate(cursor.description):
d[col[0]] = row[index]
return d
self.conn = sqlite3.connect(self.dbname)
self.conn.row_factory = self.dict_factory
- 获取uuid
select substr(u, 1, 8)||'-'||substr(u, 8, 4)||'-'||substr(u,12,4)||'-'||substr(u,16,4)||'-'||substr(u,20,12) as uuid from (select lower(hex(randomblob(16))) as u) t;
- sqlite3 导出数据为 csv,导入csv数据
导入的前提为数据库必须有这个表,没有表结构的还需要研究一下怎么导入
导出device表保存为device.csv
#!/bin/bash
db=tst.db
sqlite3 $db << EOF
.output device.csv
select * from device;
.output stdout
.exit
EOF
导入device.csv到数据库
#!/bin/bash
db=tst.db
file=device.csv
sqlite3 $db << EOF
.import ./$file device
.exit
EOF
只是导出的话,也可以参考博客SQLite中.mode的演示说明设置导出格式
参考:
[1]. Sqlite 命令行导出、导入数据(直接支持CSV)
[2]. sqlite3: 用脚本批量导出sqlite数据库中的表格数据
[3]. SQLite中.mode的演示说明
sqlite相关的更多相关文章
- sqlite相关使用
一.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能 ...
- SQLite相关异常
SQLite的异常大多都和异常IO操作有关,这类异常通常在debug测试的时候难以发现通常和用户的操作有关系,根据我遇到的包括以下几种: 1.No transaction is active 这种情况 ...
- android-数据库SQLite相关
android平台下的SQLite数据库是一种轻量级数据库,支持标准的SQL语句. 本文将介绍 android数据库的创建 利用sql语句对数据库增删改查 系统api数据库增删改查 数据库的事务 1, ...
- Entity Framework使用Sqlite时的一些配置
前段时间试着用Entity Framework for Sqlite环境,发现了一些坑坑洼洼,记录一下. 同时试了一下配置多种数据库,包括Sqlite.Sql Server.Sql Server Lo ...
- iphone开发中数据持久化之——嵌入式SQLite(三)
前两篇分别讨论了使用属性列表的数据持久化.使用对象归档的数据持久化,本文将讨论第三个实现数据持久化的方法---嵌入式SQL数据库SQLite3.SQLite3在存储和检索大量数据方面非常有效.它还能够 ...
- Swift - 操作SQLite数据库(引用SQLite3库)
SQLite轻量级数据库在移动应用中使用非常普遍,但是目前的库是C编写的,为了方便使用,对SQLite相关的操作用Swift进行了封装.这个封装代码使用了一个开源项目SQLiteDB,地址是:http ...
- SQLite 数据库
内容来源:高成珍.钟元生<Android编程经典案例解析> SQLite 数据库是Android 中内嵌的轻量级关系型数据库,本质上只是一个文件.SQLite 内部只支持NULL,INTE ...
- 一步一步教你用c# entity framework6 连接 sqlite 实现增删改查
使用entity framework6 连接 SQLite 数据库 前言 很多小型应用程序中,都要使用数据库,而现在比较流行的本地数据库非SQLite莫属. 第一步:前期准备 开发环境:vs2015 ...
- Xamarin SQLite教程数据库访问与生成
Xamarin SQLite教程数据库访问与生成 在本教程中,我们将讲解如何开发SQLite相关的App.在编写程序前,首先需要做一些准备工作,如了解Xamarin数据库访问方式,添加引用,构建使用库 ...
- Android对Sqlite数据库的增删改查
SqLite 数据库 Google 为我们提供了sqlite相关的api SqLiteOpenHelper 这是一个抽象的类 如果想要使用的话,需要其他的类去继承他 SqLiteDatabase 类 ...
随机推荐
- list转json tree的工具类
package com.glodon.safety.contingency.job; import com.alibaba.fastjson.JSON; import com.alibaba.fast ...
- C数据结构:树和森林存储方式与遍历方式
文章目录 树的存储方式 双亲表示法 孩子链表表示法 孩子兄弟表示法(二叉树表示法) 树和二叉树的转换 森林和二叉树的转换 树和森林的遍历 树的遍历方式 森林的遍历方式 浅谈一下几个问题 为什么树没有中 ...
- C语言(较深入原理):%s通过字符串首元素地址输出,用指针数组来作示例
首先,我们输出一个字符串都知道是用%s来输出,但是我们并没有多想是通过什么方式来输出的. 今天我在看指针数组的时候发现了一个问题,按就是定义一个字符类型的指针数组, /*字符串的输出本身就需要他的地址 ...
- 提取关键词作为标题---Java调用Python实现
目录 前景提示 思考 企业级处理方案流程图 Python 实现的方式 Java实现 导入Maven包 书写代码 最终版本 遗留问题: 遇到问题 1.无法解析. 2.模块找不到. 3.乱码处理 版本 继 ...
- Pytorch:以单通道(灰度图)加载图片
以单通道(灰度图)加载图片 如果我们想以单通道加载图片,设置加载数据集时的transform参数如下即可: from torchvision import datasets, transforms t ...
- kubernets之带有limit的资源
一 pod中容器的limits属性的作用 1.1 创建一个带有资源limits的pod apiVersion: v1 kind: Pod metadata: name: limited-pod s ...
- WPF开发快速入门【6】下拉框与枚举类型
概述 本文讲述下拉框和枚举类型进行绑定的一些操作. 下拉框的基本操作 设计部分: <ComboBox ItemsSource="{Binding Fruits}" Selec ...
- Swift 计算字符串展示的区域
一.如果是普通文本,那么可以采用NSString的方法,代码如下: import UIKit import PlaygroundSupport class MyViewController : UIV ...
- Python结合文件名称将多个文件复制到不同路径下
本文介绍基于Python语言,针对一个文件夹下的大量栅格遥感影像文件,基于其各自的文件名,分别创建指定名称的新文件夹,并将对应的栅格遥感影像文件复制到不同的新文件夹下的方法. 首先,我们来看一 ...
- 终于搞懂了!原来vue3中template使用ref无需.value是因为这个
前言 众所周知,vue3的template中使用ref变量无需使用.value.还可以在事件处理器中进行赋值操作时,无需使用.value就可以直接修改ref变量的值,比如:<button @cl ...