• Python 操作SQLite数据库


    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。在很多嵌入式产品中使用了它,它占用资源非常的低,python 中默认继承了操作此款数据库的引擎 sqlite3 说是引擎不如说就是数据库的封装版,开发自用小程序的使用使用它真的大赞

    简单操作SQLite数据库:创建 sqlite数据库是一个轻量级的数据库服务器,该模块默认集成在python中,开发小应用很不错.

    import sqlite3
    
    # 数据表的创建
    conn = sqlite3.connect("data.db")
    cursor = conn.cursor()
    create = "create table persion(" \
             "id int auto_increment primary key," \
             "name char(20) not null," \
             "age int not null," \
             "msg text default null" \
             ")"
    cursor.execute(create)        # 执行创建表操作
    

    简单操作SQLite数据库:简单的插入语句的使用

    insert = "insert into persion(id,name,age,msg) values(1,'lyshark',1,'hello lyshark');"
    cursor.execute(insert)
    insert = "insert into persion(id,name,age,msg) values(2,'guest',2,'hello guest');"
    cursor.execute(insert)
    insert = "insert into persion(id,name,age,msg) values(3,'admin',3,'hello admin');"
    cursor.execute(insert)
    insert = "insert into persion(id,name,age,msg) values(4,'wang',4,'hello wang');"
    cursor.execute(insert)
    insert = "insert into persion(id,name,age,msg) values(5,'sqlite',5,'hello sql');"
    cursor.execute(insert)
    
    data = [(6, '王舞',8, 'python'), (7, '曲奇',8,'python'), (9, 'C语言',9,'python')]
    insert = "insert into persion(id,name,age,msg) values(?,?,?,?);"
    cursor.executemany(insert,data)
    

    简单的查询语句的使用

    select = "select * from persion;"
    cursor.execute(select)
    #print(cursor.fetchall())   # 取出所有的数据
    
    select = "select * from persion where name='lyshark';"
    cursor.execute(select)
    print(cursor.fetchall())   # 取出所有的数据
    
    select = "select * from persion where id >=1 and id <=2;"
    list = cursor.execute(select)
    for i in list.fetchall():
        print("字段1:", i[0])
        print("字段2:", i[1])
    

    简单的更新数据与删除

    update = "update persion set name='苍老师' where id=1;"
    cursor.execute(update)
    
    update = "update persion set name='苍老师' where id>=1 and id<=3;"
    cursor.execute(update)
    
    delete = "delete from persion where id=3;"
    cursor.execute(delete)
    
    select = "select * from persion;"
    cursor.execute(select)
    print(cursor.fetchall())   # 取出所有的数据
    
    conn.commit()       # 事务提交,每执行一次数据库更改的操作,就执行提交
    cursor.close()
    conn.close()
    

    SQLite小试牛刀 实现用户名密码验证,当用户输入错误密码后,自动锁定该用户1分钟.

    import sqlite3
    import re,time
    
    conn = sqlite3.connect("data.db")
    cursor = conn.cursor()
    """create = "create table login(" \
             "username text not null," \
             "password text not null," \
             "time int default 0" \
              ")"
    cursor.execute(create)
    cursor.execute("insert into login(username,password) values('admin','123123');")
    cursor.execute("insert into login(username,password) values('guest','123123');")
    cursor.execute("insert into login(username,password) values('lyshark','1231');")
    conn.commit()"""
    
    while True:
        username = input("username:")  # 这个地方应该严谨验证,尽量不要让用户拼接SQL语句
        password = input("passwor:")   # 此处为了方便不做任何验证(注意:永远不要相信用户的输入)
        sql = "select * from login where username='{}'".format(username)
        ret = cursor.execute(sql).fetchall()
        if len(ret) != 0:
            now_time = int(time.time())
            if ret[0][3] <= now_time:
                print("当前用户{}没有被限制,允许登录...".format(username))
                if ret[0][0] == username:
                    if ret[0][1] == password:
                        print("用户 {} 登录成功...".format(username))
                    else:
                        print("用户 {} 密码输入有误..".format(username))
                        times = int(time.time()) + 60
                        cursor.execute("update login set time={} where username='{}'".format(times,username))
                        conn.commit()
                else:
                    print("用户名正确,但是密码错误了...")
            else:
                print("账户 {} 还在限制登陆阶段,请等待1分钟...".format(username))
        else:
            print("用户名输入错误")
    

    SQLite检索时间记录 通过编写的TimeIndex函数检索一个指定范围时间戳中的数据.

    import os,time,datetime
    import sqlite3
    
    """
    conn = sqlite3.connect("data.db")
    cursor = conn.cursor()
    create = "create table lyshark(" \
             "time int primary key," \
             "cpu int not null" \
             ")"
    cursor.execute(create)
    # 批量生成一堆数据,用于后期的测试.
    for i in range(1,500):
        times = int(time.time())
        insert = "insert into lyshark(time,cpu) values({},{})".format(times,i)
        cursor.execute(insert)
        conn.commit()
        time.sleep(1)"""
    
    # db = data.db 传入数据库名称
    # table = 指定表lyshark名称
    # start = 2019-12-12 14:28:00
    # ends  = 2019-12-12 14:29:20
    def TimeIndex(db,table,start,ends):
        start_time = int(time.mktime(time.strptime(start,"%Y-%m-%d %H:%M:%S")))
        end_time = int(time.mktime(time.strptime(ends,"%Y-%m-%d %H:%M:%S")))
        conn = sqlite3.connect(db)
        cursor = conn.cursor()
        select = "select * from {} where time >= {} and time <= {}".format(table,start_time,end_time)
        return cursor.execute(select).fetchall()
    
    if __name__ == "__main__":
        temp = TimeIndex("data.db","lyshark","2019-12-12 14:28:00","2019-12-12 14:29:00")
        print(temp)
    

    SQLite提取数据并绘图 通过使用matplotlib这个库函数,并提取出指定时间的数据记录,然后直接绘制曲线图.

    import os,time,datetime
    import sqlite3
    import numpy as np
    from matplotlib import pyplot as plt
    
    def TimeIndex(db,table,start,ends):
        start_time = int(time.mktime(time.strptime(start,"%Y-%m-%d %H:%M:%S")))
        end_time = int(time.mktime(time.strptime(ends,"%Y-%m-%d %H:%M:%S")))
        conn = sqlite3.connect(db)
        cursor = conn.cursor()
        select = "select * from {} where time >= {} and time <= {}".format(table,start_time,end_time)
        return cursor.execute(select).fetchall()
    
    def Display():
        temp = TimeIndex("data.db","lyshark","2019-12-12 14:28:00","2019-12-12 14:29:00")
        list = []
        for i in range(0,len(temp)):
            list.append(temp[i][1])
        plt.title("CPU Count")
        plt.plot(list, list)
        plt.show()
        
    if __name__ == "__main__":
        Display()
    
  • 相关阅读:
    嵌入式网络设备一次盲点补报的开发经验(二)
    嵌入式网络设备一次盲点补报的开发经验(一)
    调试lcd时候给linux单板移植tslib
    java 常用的解析工具
    快速上手 Echarts
    alibaba/fastjson 之 JSONPath
    CentOS 7.5 安装Docker 教程
    Java问题-java进程占用内存过高,排查原因
    zabbix问题-cannot create IPC key for path
    rsync服务-部署配置与维护
  • 原文地址:https://www.cnblogs.com/LyShark/p/12172674.html
Copyright © 2020-2023  润新知