• python---基础知识回顾(八)数据库基础操作(sqlite和mysql)


    一:sqlite操作

    SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

    Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

    操作步骤:

    1.创建连接(记得导入模块)

    import sqlite3
    conn = sqlite3.connect("test.db")  #若是文件不存在会自动创建,路径可以是相对,也可以是绝对。这个文件就是相当于一个数据库

    2.根据连接获取游标

    curs = conn.cursor()

    3.根据游标进行操作数据表

    curs.execute("""create table info(
                        uid INTEGER PRIMARY KEY AUTOINCREMENT ,  #注意设置主键,必须是 INTEGER类型
                        username varchar(20),
                        password varchar(32)
                    )
                """)
    
    curs.execute("""
                    CREATE INDEX  un on info (username)  #创建索引
    """)
    相关基础

    4.进行数据的增删改查


    curs.execute(""" INSERT INTO info(username,password) VALUES ("ld","123456"); """) 删 curs.execute(""" DELETE FROM info WHERE uid > 3; """) 改 curs.execute(""" UPDATE info SET username = "dsad" WHERE uid = 2; """)
    查找
    info_all = curs.execute("""
                  SELECT * from info;
    """)
    
    for row in curs.fetchall():
        print(row[0],row[1],row[2])

    5.如果我们对数据库进行了增删改修改,原来数据(或者数据表)了,我们需要去提交我们的操作

    conn.commit()

    6.操作完成,断开游标和数据库连接

    curs.close()
    conn.close()

    二:mysql操作

     mysql操作需要我们导入pymysql模块(非内置)。

    pip3 install pymysql

    (1)其操作步骤和上面sqlite几乎一致

    import pymysql
    
    conn = pymysql.connect(host="localhost",user="root",password="root",database="t1")  #可以设置charset编码
    
    cur = conn.cursor()  #设置游标,默认是执行查询后返回元组信息
    #cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #设置游标返回字典类型信息
    #执行SQL语句
    sql = "select * from users"
    cur.execute(sql)  #执行SQL语句,返回查询成功后的记录条数
    
    ret = cur.fetchall()  #返回元组信息
    print(ret)
    #((1, 'xiaoyu', 'xiaoudaf', '123'), (2, 'xiaoyu', 'xiaoudafc', '123'),)
    cur.close() conn.close()

    (2)SQL注入

    对于用户输入的信息,我们不要直接进行拼接,需要进行过滤处理,或者使用模块方法直接帮我们解决这个问题

    # 原来是我们对sql进行字符串拼接
    # sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
    # print(sql)
    # res=cursor.execute(sql)
    
    #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
    sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
    res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

    (3)增删改需要commit

    一次增加一条
    sql = 'insert into users(name,fullname,password) VALUES ("dsada","dasdasf","dsad")' cur.execute(sql) sql = 'insert into users(name,fullname,password) VALUES (%s,%s,%s)' cur.execute(sql,("aaaaa","asd666","6666"))
    #获取插入的最后一条数据的自增ID
    print(cur.lastrowid)  #只对一次增加一个可以直接看出,对于一次增加多个需要进行数量添加
    一次执行多条
    sql = 'insert into users(name,fullname,password) VALUES (%s,%s,%s)'
    cur.executemany(sql,[("aaadsaaa","asd6dasd66","6666"),("adsaaaaa","asd6awf66","6666"),("awaaaaa","asd666","6666")])

    注意execute和executemany执行后会返回执行影响的条数

    (4)查询

    sql = "select * from users"
    rows = cur.execute(sql) #返回影响的函数rows,结果放在一个集合中,等待查询
    
    ret = cur.fetchone()  #获取一条数据
    print(ret)  #(1, 'xiaoyu', 'xiaoudaf', '123')
    
    ret = cur.fetchmany(2)  #获取指定数量的数据,从当前位置
    print(ret)  #((2, 'xiaoyu', 'xiaoudafc', '123'), (3, 'daf', 'fafwafs', 'fwa'))
    
    ret = cur.fetchall()    #获取当前位置下的所有数据
    print(ret)
    
    #移动游标位置
    cur.scroll(0,mode="absolute")
    ret = cur.fetchall()    #获取了所有的数据
    print(ret)
    
    cur.scroll(-5,mode="relative")  #游标处于最后,现在相对最后向前移动5条
    ret = cur.fetchall()    #获取了后5条数据
    print(ret)
  • 相关阅读:
    python爬虫学习
    Java基础知识11--Optional类
    07 Windows访问远程共享文件夹---利用\IP地址
    Springcloud 学习笔记15-打开postman console控制台,查看接口测试打印log日志信息
    Springcloud 学习笔记14-IaaS, PaaS和SaaS的区别
    Springcloud 学习笔记13-使用PostMan上传/下载文件,前后端联合测试
    Java基础知识10--Stream API详解02
    Java基础知识09--Stream API详解01
    洛谷 P2587 [ZJOI2008]泡泡堂(贪心)
    洛谷 P3199 [HNOI2009]最小圈(01分数规划,spfa判负环)
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8970780.html
Copyright © 2020-2023  润新知