首页 > 数据库 >python操作SQLite数据库

python操作SQLite数据库

时间:2023-08-16 13:11:35浏览次数:42  
标签:SQLite varchar python 32 数据库 sqlite rowid local 主键

1、脚本

# !/usr/local/python3.8/bin/python3
# -*- coding:UTF-8 -*-
import sqlite3
import re


def dict_factory(cursor, row):
    # 将游标获取的数据处理成字典返回
    # cursor.description:获取表头
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d


def connsqlite(SQL):
    local_all = '不支持的SQL语句'
    # 1.创建连接 check_same_thread=False开启多线程
    # con = sqlite3.connect(database='/Users/liuqian/sqliteFiles/brush_question', check_same_thread=False)
    conn = sqlite3.connect(database='test.db', check_same_thread=False)
    # 获取cursor对象
    cur = conn.cursor()
    if re.match('^SELECT|^select', SQL):
        # 使得查询结果以字典形式返回
        cur.row_factory = dict_factory
        curres = cur.execute(SQL)
        local_all = curres.fetchall()
    elif re.match('^UPDATE|^INSERT|^update|^insert', SQL):
        try:
            local_all = cur.execute(SQL)
            conn.commit()
        except Exception as f:
            # Rollback in case there is any error
            local_all = f
            conn.rollback()
    cur.close()
    conn.close()
    return local_all


if __name__ == '__main__':
    # 新建表
    connsqlite(
        'CREATE TABLE info (id integer primary key autoincrement not null,hostname varchar(32),cpu varchar(32),memory varchar(32),disk varchar(32),createdatetime TimeStamp NOT NULL DEFAULT (datetime("now","localtime")));')
    # 表中插入数据的两种方式
    sqlres = connsqlite(
        "INSERT INTO info (hostname,cpu,memory,disk) VALUES ('{}','{}','{}','{}');".format('a', 'b', 'c', 'd'))
    sqlres1 = connsqlite(
        "INSERT INTO info VALUES (null,'{}','{}','{}','{}',datetime('now','localtime'));".format('a', 'b', 'c', 'd'))
    # 查询数据,返回字典格式的数据
    selres = connsqlite('select rowid,* from cpuinfo;')
    print(selres)

 2、SQLite常用操作

# 创建表
CREATE TABLE info ( 
id integer primary key autoincrement not null, 
hostname varchar(32),
cpu varchar(32),
memory varchar(32),
disk varchar(32),
createdatetime TEXT NOT NULL DEFAULT (datetime('now','localtime'))
); 
# 联合主键 ,在建表时 
CREATE TABLE tb_test ( 
bh varchar(5), 
id integer, 
ch varchar(20),
mm varchar(20),
primary key (id,bh)
);
注意:在创建联合主键时,主键创建要放在所有字段最后面,否则也会创建失败

# 修改select语句显示格式
sqlite> .header on
sqlite> .mode column
sqlite> select rowid,* from username;
rowid  id  name  password
-----  --  ----  --------
1      1   abc   123456  
2      2   张三    123456

注意:
必须显式的指定rowid才可以获取rowid列。查询rowid的效率非常高,所以直接使用rowid作为查询条件是一个优化查询的好方法
rowid列作为主键,在极端情况下存在隐患。由于rowid值会一直递增,如果达到所允许的最大值9223372036854775807 后,它会自动搜索没有被使用的值,重新使用,并不会提示用户。这时,使用rowid排序记录,会产生乱序,并引入其他的逻辑问题。所以,如果用户的数据库存在这种可能的情况,就应该使用AUTOINCREMENT定义主键,从而避免这种问题。使用AUTOINCREMENT设置自增主键,虽然也会遇到9223372036854775807 问题,但是它会报错,提示用户,避免产生rowid所引发的问题

# 查询数据库中有哪些表
SELECT tbl_name FROM sqlite_master WHERE type = 'table';

# 查看cpuinfo表的信息(命令行:sqlite> .schema cpuinfo)
SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'cpuinfo';

 

参考链接:
       https://github.com/pawelsalawa/sqlitestudio/releases     # SQLiteStudio下载
       https://www.sqliteexpert.com/download.html        # SQLite Expert下载
       https://blog.csdn.net/u014644574/article/details/127745981     # sqlite日期和时间类型
       https://m.runoob.com/sqlite/

 

标签:SQLite,varchar,python,32,数据库,sqlite,rowid,local,主键
From: https://www.cnblogs.com/xwupiaomiao/p/17633739.html

相关文章

  • python+selenium(windows10) 安装
    1.安装python2. 安装selenium(piplist查看是否已安装)2.1 cmd窗口输入:pip(如果有内容显示,说明正常)        2.2 cmd输入指令安装selenium:pipinstallselenium==* .**.**( 也可以不指定版本)【如果安装中途断了,重新安装即可,不影响效果】 ......
  • python第七天
    一、元组(tuple)元组:元组的排列是有顺序的,可以进行切片,元组的数据不可以进行修改建议:元组在写的时候在最后加逗号(,),以区分参数数据例:tu=(111,"alex",(11,22),[(33,44)],True,22,33,44,)元组相当于对列表的二次加工元组具有2条功能count和index1、count对元组的指定数据进......
  • Python 如何自动遍历文件下所有的文件,然后再对每一个文件夹读取里面的csv文件
    Python如何自动遍历文件下所有的文件,然后再对每一个文件夹读取里面的csv文件:代码:importosimportcsv#设置要遍历的文件夹路径folder_path="your_folder_path"#遍历文件夹forroot,dirs,filesinos.walk(folder_path):#遍历当前文件夹下的所有文件for......
  • PostgreSQL数据库升级与迁移
    一、风哥PG-DBA培训14:PostgreSQL数据库升级与迁移课程目标:本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL备份恢复与迁移升级阶段之PostgreSQL数据库升级与迁移,学完本课程可以PostgreSQL数据库升级方案,PostgreSQL数据库小版本升级实战,PostgreSQL数据库......
  • SAP CRM 的 pricing 数据库表 PRCD_HEAD
    在SAPCRM系统中,PRCD_HEAD是一个重要的数据库表,用于存储定价计划(PricingPlan)的主要信息。定价计划是一个关键的概念,它定义了在销售和定价过程中使用的价格策略和规则。PRCD_HEAD表记录了每个定价计划的基本属性和配置信息,以支持在销售交易中正确地应用定价。以下是一个详细说明S......
  • 利用Python隧道ip轻松构建全局爬虫网络
    嘿,爬虫程序员们!你们有没有碰到过需要大规模数据爬取的情况?也许你们之前遇到过网站的反爬措施,卡住你们的进度。别担心,今天我来分享一个利用Python隧道爬虫ip实现的方法,帮助你们轻松搭建全局爬虫ip网络,解决反爬的难题。首先,我们要明白什么是隧道爬虫ip隧道爬虫ip,顾名思义,就是在网络上......
  • 基于python的12306自动抢票系统的设计与实现
    铁路售票系统12306网站作为一个广受人们的日常使用工具,受大极大的关注。铁路售票的管理者都主要考虑降低成本,提升售票服务满意度。一年一度的春运和节假日出行高峰期,给众多的出行群众者带来了极大的烦恼,也给用户购买火车票造成了巨大的不方便。本文通过调研动车售票系统的业务流程,......
  • 学了Python基本语法 下一步该学什么
    刚入门Python,学习了基本语法后,你可以开始编写简单的程序了。接下来,你可以学习Python的标准库和第三方库,掌握更多的编程技巧和知识,提高自己的编程能力。同时,也可以通过实践项目来巩固所学知识,提高自己的实战能力。学习Python基本语法是入门的第一步,接下来你可以考虑以下几个方向:1......
  • 专利统计数据库PATSTAT
    欧洲专利局(EPO)全球专利统计数据库PATSTAT是当前世界收录最全的专利数据库,专门面向专利分析人员、统计决策人员和高级研究人员。欧洲专利局发布的PATSTAT使用指南主要是对PATSTAT数据库使用进行全面性指导,帮助用户分析专利数据,为解决各种问题提供思路,并针对PATSTAT使用过程中的关键......
  • 8-16|Python操作3Dmax简单例子
    是的,Python可以与3dsMax交互。Autodesk3dsMax提供了一个名为`MaxPlus`的PythonAPI,可以使开发人员使用Python控制和自动化3dsMax。使用这个API,你可以创建、查询和编辑场景对象,控制动画,以及完成3dsMax内的许多其他任务。以下是使用Python与3dsMax交互的基本步骤:1.**安装3ds......