• Python3操作SQLite3创建表主键自增长|CRUD基本操作



    Win11查看安装的Python路径及安装的库

    Python PEP8 代码规范常见问题及解决方案

    Python3操作MySQL8.XX创建表|CRUD基本操作

    Python3操作SQLite3创建表主键自增长|CRUD基本操作

    anaconda3最新版安装|使用详情|Error: Please select a valid Python interpreter

    Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数

    Python函数绘图与高等代数互融实例(二):闪点函数

    Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线

    Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域

    Python函数绘图与高等代数互融实例(五): 则线图综合案例


    一: SQLite3创建表时主键自增长

    1: sqlite支持建立自增主键
    create table t_user 
    (
     id integer primary key autoincrement,
     age int(2), 
     name varchar(10),
     address varchar(100)
    )

     2: 联合主键 

     create table t_user
    (

     address_id varchar(20), 
     id integer primary key autoincrement, age int(2),
     name varchar(10),
     address varchar(100),

     primary key (id,address_id )

    )

    注意:在创建联合主键时,主键创建要放在所有字段最后面,否则也会创建失败

    二: Python使用SQLite3创建表

    import sqlite3
    
    '''
       由于Python已经内置了SQLite3,直接引入SQLite3模块即可使用
    '''
    
    # 连接到数据库SQLite
    # 数据库文件时data.db,如果文件不存在,则自动在当前目录下面创建
    
    conn = sqlite3.connect('data.db')
    # 创建一个游标对象Cursor
    cursor = conn.cursor()
    # 执行一条建表语句,创建t_user表
    try:
        cursor.execute("create table t_user (id INTEGER  PRIMARY KEY  AUTOINCREMENT,"
                       " age int(2), name varchar(10),address varchar(100))")
        # 提交
        conn.commit()
    except Exception as err:
        conn.rollback()
        print("error: ", err)
    finally:
        print("执行finally模块: ", "关闭系统资源")
        # 关闭游标
        cursor.close()
        # 关闭Connection对象
        conn.close()
    

     三: 批量插入主键自增长数据主键的赋值

    import sqlite3
    
    '''
      对数据库SQLite3执行CRUD操作
    '''
    
    conn = sqlite3.connect("data.db")
    
    cursor = conn.cursor()
    param = [(None, 20, "老王", "北京市海淀区中关村软件园创新中心1-1001"),
             (None, 23, "老李", "北京市朝阳区中关村软件园创新中心1-1011"),
             (None, 22, "老高", "北京市昌平区中关村软件园创新中心1-1021"),
             (None, 25, "老函", "北京市密云区中关村软件园创新中心1-1031"),
             (None, 80, "老彪", "北京市房山区中关村软件园创新中心1-1041"),
             (None, 90, "老表", "北京市丰台区中关村软件园创新中心1-1051")]
    try:
        # 批量插入数据
        sql = 'insert into t_user values(?,?,?,?)'
        cursor.executemany(sql, param)
        conn.commit()
    except Exception as err:
        print("插入数据异常: ", err)
        conn.rollback()
    finally:
        cursor.execute("select * from t_user")
        resultSet = cursor.fetchall()
        for item in resultSet:
            print("数据库表(t_user)数据集: ", item)
    
        # 释放资源,关闭游标
        cursor.close()
        # 关闭连接
        conn.close()
    

    四: 查看执行结果 

    D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarExecutorCRUD.py 
    数据库表(t_user)数据集:  (1, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001')
    数据库表(t_user)数据集:  (2, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011')
    数据库表(t_user)数据集:  (3, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021')
    数据库表(t_user)数据集:  (4, 25, '老函', '北京市密云区中关村软件园创新中心1-1031')
    数据库表(t_user)数据集:  (5, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041')
    数据库表(t_user)数据集:  (6, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051')
    数据库表(t_user)数据集:  (7, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001')
    数据库表(t_user)数据集:  (8, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011')
    数据库表(t_user)数据集:  (9, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021')
    数据库表(t_user)数据集:  (10, 25, '老函', '北京市密云区中关村软件园创新中心1-1031')
    数据库表(t_user)数据集:  (11, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041')
    数据库表(t_user)数据集:  (12, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051')
    数据库表(t_user)数据集:  (13, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001')
    数据库表(t_user)数据集:  (14, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011')
    数据库表(t_user)数据集:  (15, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021')
    数据库表(t_user)数据集:  (16, 25, '老函', '北京市密云区中关村软件园创新中心1-1031')
    数据库表(t_user)数据集:  (17, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041')
    数据库表(t_user)数据集:  (18, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051')
    数据库表(t_user)数据集:  (19, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001')
    数据库表(t_user)数据集:  (20, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011')
    数据库表(t_user)数据集:  (21, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021')
    数据库表(t_user)数据集:  (22, 25, '老函', '北京市密云区中关村软件园创新中心1-1031')
    数据库表(t_user)数据集:  (23, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041')
    数据库表(t_user)数据集:  (24, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051')

    Process finished with exit code 0
     

    五:SQLite3批量插入的方式

    通过Python脚本向sqlite3数据库批量插入数据
      这里记录两种批量插入数据的方式:
    1、通过execute,用for语句循环
    #导入sqlite3包
    import sqlite3
    # 创建数据库连接
    conn = sqlite3.connect("data.db")
    #获取一个游标对象
    cursor=conn.cursor()
    #设置参数i,for语句循环
    for i in range(1,10):
        param=str(i)
        sql="insert into t_user values(?,?,?,?)"
        cursor.execute(sql,param)
        conn.commit()
    #关闭连接
    conn.close()
    cursor.close()
    
    
    2、通过executemany,数据的格式必须为list[tuple(),tuple(),tuple()]或者tuple(tuple(),tuple(),tuple())
       import sqlite3
    # 打开数据库连接
    conn = sqlite3.connect("data.db")
    # 使用cursor()方法获取操作游标
    cursor = conn.cursor()
    #批量插入数据;mysql使用%  sqlite使用?
    sql="insert into t_user values(?,?,?,?)"
    #每一个值都作为一个元组,整个参数集作为一个元组
    param=((111111,'haha',13),(22222,'hehe',34))
    #或者每一个值作为元组,整个参数集作为list :param=[(111111,'haha',13),(22222,'hehe',34)]
    #使用executemany方法批量插入数据
    cursor.executemany(sql,param)
    #提交
    conn.commit()
    #关闭
    conn.close()
    cursor.close()
    
    ===============================================================================
    三、cursor执行命令的方法
    1、 callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
    2、 execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
    3、executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
    4、nextset(self):移动到下一个结果集
    ===============================================================================
    
    四、cursor接受返回值的方法
    1、 fetchall(self):接收全部的返回结果行.
    2、 fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
    3、 fetchone(self):返回一条结果行.
    4、 scroll(self, value, mode=‘relative’):移动指针到某一行.如果mode=‘relative’,则表示从当前所在行移动value条,如果mode=‘absolute’,则表示从结果集的第一 行移动value条
    #执行查询的操作
     cursor.execute("select * from cdinfo")
    #用fetcall方法获取查询返回的全部结果,将结果保存到tup,每条结果都是元组类型,所有的元组组成了一个元组集
     tup=cursor.fetchall()
     print(tup)#输出整个结果 
     print tup[0][3]#输出元组集中,第一个元组的第四个元素
     

    六: Python查询SQLite3数据库的三种方式

    import sqlite3
    
    '''
    
        Python提供了三种查询数据的函数:
            fetchone(): 获取查询结果集中的下一条记录
            fetchmany(size)获取指定数量的记录
            fetchall():获取结果集中的所有记录
    
    '''
    
    conn = sqlite3.connect("data.db")
    cursor = conn.cursor()
    userId = 5
    try:
        sql = "select * from t_user"
        cursor.execute(sql)
        # 获取查询结果
        resultOne = cursor.fetchone()
        print("resultOne: ", resultOne)
        resultTwo = cursor.fetchmany(20)
        print("resultTwo: ", resultTwo)
        resultAll = cursor.fetchall()
        print("resultAll: ", resultAll)
        # 使用占位符?,可以避免SQL注入的风险,元组作为参数传值,元组中只有一个元素时,最后的逗号不能去掉
        resultWhere = cursor.execute("select * from t_user where id <= ?", (userId,))
        print()
        print("resultWhere: ", resultWhere.fetchall())
    except Exception as err:
        print("系统异常: ", err)
    
    finally:
        cursor.close()
        conn.close()
    

    七: 执行结果 

    D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\ClassGrammarBatchOperation.py 
    resultOne:  (1, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001')
    resultTwo:  [(2, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (3, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (4, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (5, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (6, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (7, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (8, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (9, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (10, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (11, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (12, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (13, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (14, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (15, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (16, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (17, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (18, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (19, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (20, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (21, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021')]
    resultAll:  [(22, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (23, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (24, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (25, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (26, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (27, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (28, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (29, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (30, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (31, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (32, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (33, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (34, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (35, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (36, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (37, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (38, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (39, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (40, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (41, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (42, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (43, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (44, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (45, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (46, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (47, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (48, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (49, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (50, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (51, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (52, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (53, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (54, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (55, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (56, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (57, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (58, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (59, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (60, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (61, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (62, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (63, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (64, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (65, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (66, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (67, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (68, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (69, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (70, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (71, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (72, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (73, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (74, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (75, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (76, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (77, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (78, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (79, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (80, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (81, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (82, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (83, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (84, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (85, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (86, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (87, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (88, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (89, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (90, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (91, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (92, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (93, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (94, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (95, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (96, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (97, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (98, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (99, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (100, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (101, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (102, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (103, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (104, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (105, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (106, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (107, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (108, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051'), (109, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (110, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (111, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (112, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (113, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041'), (114, 90, '老表', '北京市丰台区中关村软件园创新中心1-1051')]

    resultWhere:  [(1, 20, '老王', '北京市海淀区中关村软件园创新中心1-1001'), (2, 23, '老李', '北京市朝阳区中关村软件园创新中心1-1011'), (3, 22, '老高', '北京市昌平区中关村软件园创新中心1-1021'), (4, 25, '老函', '北京市密云区中关村软件园创新中心1-1031'), (5, 80, '老彪', '北京市房山区中关村软件园创新中心1-1041')]

    Process finished with exit code 0
     

    八: 更新数据 

    import sqlite3
    
    '''
      对数据库SQLite3执行update操作
    '''
    
    conn = sqlite3.connect("data.db")
    
    cursor = conn.cursor()
    
    try:
        sql = "update t_user set name=? where id = ?"
        cursor.execute(sql, ('老杨', 1))  # id为1的字段更新为"老杨"
        conn.commit()
        print('执行成功!')
    except Exception as err:
        print("update时发生了异常: ", err)
        conn.rollback()
    finally:
        result = cursor.execute("select * from t_user where id = ?", (1,))
        print("更新后的数据为:  ", result.fetchone())
        print("游标,数据库连接关闭,释放连接资源.....")
        cursor.close()
        conn.close()
    

    九: 删除操作

    import sqlite3
    
    '''
      对数据库SQLite3执行delete操作
    '''
    
    conn = sqlite3.connect("data.db")
    
    cursor = conn.cursor()
    try:
        sql = "delete from t_user where id = ?"
        cursor.execute(sql, (204,))  # id=201记录删除
        conn.commit()
        print('执行成功!')
    except Exception as err:
        print("删除时发生了异常: ", err)
        conn.rollback()
    finally:
        result = cursor.execute("select * from t_user where id = 204")
        for item in result.fetchall():
            print("删除后的数据为:  ", item)
    
        print("游标,数据库连接关闭,释放连接资源.....")
        cursor.close()
        conn.close()
    

  • 相关阅读:
    lidar_camera_calib代码解读-优化部分
    300万数据导入导出优化方案,从80s优化到8s(实测)
    LibreOJ 137. 最小瓶颈路(加强版) 题解 Kruscal重构树 ST表
    arm版Linux下安装大数据集群各种组件
    力扣:133. 克隆图(Python3)
    数据分享|基于Python、Hadoop零售交易数据的Spark数据处理与Echarts可视化分析
    小程序video标签在底部出现1px无法去除的黑色线
    acwing算法基础之数据结构--栈和队列
    从 Elasticsearch 到 Apache Doris,统一日志检索与报表分析,360 企业安全浏览器的数据架构升级实践
    “JSR303和拦截器在Java Web开发中的应用与实践“
  • 原文地址:https://blog.csdn.net/u014635374/article/details/133303957