• Python之操作MySQL数据库


    一、操作步骤

    1、导入pymysql模块

    2、建立连接(ip、用户名、密码、数据库名、端口号、字符集、(自动提交参数)

    3、建立游标

    4、执行sql语句

    (4、需要提交的提交)

    5、关闭游标

    6、关闭连接

    import pymysql
    
    host='xxx.xxx.xxx.xxx'
    user='abc'
    password='123456' #密码只能是字符串
    db='database_name'
    port=3306 #端口号只能写int类型
    charset='utf8' #只能写utf8,不能写utf-8
    
    #建立连接
    conn=pymysql.connect(host=host,password=password,user=user,db=db,
    port=port,charset=charset)
    
    #建立游标
    cur=conn.cursor()
    
    res=cur.execute('show tables;')  #只是帮你执行sql语句,不会返回执行结果
    #print(res)  #结果为执行语句的指针序列号
    print(cur.fetchall())  #获取数据库里面的所有表,返回的是一个二维数组,一个大数组,里面是每个表
    
    #关闭游标
    cur.close()
    
    #关闭连接
    conn.close()

    二、执行sql语句

    1)cur.execute('sql语句')

    cur.execute('select * from app_myuser limit 5;') #获取一张表中的所有信息
    print(cur.fetchall())

    2)insert、update、delete都需要在.execute()之后执行提交后才可以将数据写入数据库

    (1)conn.commit()

    sql='insert into app_mysuer(username,passwd,is_admin) values("lrx","123456",1)'
    cur.execute(sql) #这样执行完数据库中无数据
    #insert、update、delete都需要在.execute()之后执行.commit()才可以将数据写入数据库
    conn.commit() #提交

    (2)将提交参数直接写在连接语句中,可以自动提交

    autocommit=True

    #建立连接
    conn=pymysql.connect(host=host,password=password,user=user,db=db,
    port=port,charset=charset,autocommit=True)
    #conn.commit()   #加入自动提交参数后就不需要再执行单独提交语句了

    3)获取表里的所有字段的信息

    res=cur.execute('select *from app_myuser ;')#不执行这条的话,cur.description打印的结果为None
    print(cur.description)  #获取表里的所有字段的信息
    #结果为:
    #(('id', 3, None, 11, 11, 0, False), ('username', 253, None, 32, 32, 0, False), ('passwd', 253, None, 32, 32, 0, False), ('is_admin', 2, None, 6, 6, 0, False))

    4)获取表结构信息

    sql2='describe app_myuser'
    res=cur.execute(sql2)
    print(cur.fetchall())
    #结果为:
    #(('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment'), ('username', 'varchar(32)','NO', 'UNI', None, ''), ('passwd', 'varchar(32)', 'NO', '', None, ''), ('is_admin','smallint(6)', 'NO', '', None, ''))

    三、返回sql语句执行结果

    • print(cur.fetchall())
    • print(cur.fetchone())
    print(cur.fetchall())
    print(cur.fetchone()) #返回结果为空,因为上面已经执行到最后了,游标到尾了,类似于文件指针
    
    #先注释掉.fetchall()再运行即可
    print(cur.fetchone()) #每次取一行数据

    .fetchall()和.fetchone()的区别:

    • 在不知道一共多少条的情况下,只能使用.fetchall()
    • .fetchall()返回的是二维数组,取字段时不方便
    • .fetchone()返回的是一维数组,当结果只有一条时,使用.fetchone()比较方便

     四、具体实现

    1、传入任意数据库信息,执行sql语句并返回结果:

    #传入sql语句,返回sql执行结果
    def my_db(ip,user,password,db,sql,port=3306,charset='utf8'):
        conn=pymysql.connect(
            host=ip,user=user,password=password,db=db,port=port,
            charset=charset,autocommit=True) #连接数据库,自动提交sql
            cur=conn.cursor() #建立游标
            cur.execute(sql) #执行sql语句
            res=cur.fetchall() #返回sql执行结果
            cur.close() #关闭游标
            conn.close() #关闭连接
            return res #返回执行结果

    2、使用固定数据库,执行sql语句并返回结果:

    def my_db2(sql):
        conn=pymysql.connect(
            host='xxx.xxx.xxx.xxx',user='abc',password='123456',db='dbname',port=3306,
            charset='utf8',autocommit=True)    
        cur=conn.cursor()
        cur.execute(sql)
        res=cur.fetchall()   
        cur.close()
        conn.close()
        return res                   
     
    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    基础技术
    Luogu1438 无聊的数列(线段树)
    树状数组从入门到入土
    左偏树
    PA2014-Final Zarowki(堆)
    BZOJ1455罗马游戏
    【小米oj】 海盗分赃
    【小米oj】 最少交换次数
    【小米oj】 大胃王的烦恼
    【小米oj】 不一样的排序
  • 原文地址:https://www.cnblogs.com/yiruliu/p/9721643.html
Copyright © 2020-2023  润新知