1. 程式人生 > 資料庫 >MySQL資料庫與python互動

MySQL資料庫與python互動

1.安裝引入模組

  • 安裝mysql模組

    pip install PyMySQL;
  • 檔案中引入模組

    import pymysql

2.認識Connection物件

  • 用於建立與資料庫的連線

  • 建立物件:呼叫connect()方法

    conn = pymysql.connect(host="主機",port=3306,user="使用者名稱",passwd="密碼",db="資料庫名",charset="utf8")

    如果是本機,host填'localhost',port埠號,預設3306,charset字元編碼,預設是'gb2312',要求與資料庫建立時指定的編碼一致,否則中文會亂碼

  • 物件方法

    • close()-------關閉連線
    • commit()-----提交事務,使操作生效,在執行select查詢任務時,則不需要這一步
    • rollback()----回滾事務,放棄之前的操作
    • cursor()------建立cursor物件,用於執行sql語句

3.認識Cursor物件

  • 執行sql語句

  • 建立物件,呼叫Connection物件的cursor()方法

    cur = conn.cursor()
  • 物件的方法:

    • close()-----關閉
    • execute(sql,[,parameters])-----執行語句,返回受影響的行數,第二個引數可選,元組或列表型別,引數化可以防止sql注入風險
    • fetchone()-----執行查詢語句時,獲取查詢結果集的第一個行資料,返回一個元組,未查到,則返回None。如果結果集不止一條資料,可以再次執行fetchone()獲得第二個行資料,依此類推
    • fetchall()-----執行查詢時,獲取結果集的所有行,一行構成一個元組,再將這些元組裝入一個元組返回,未查到,則返回空元組()。
    • scroll(value[,mode])-----將行指標移動到某個位置。mode表示移動的方式,預設值為'relative',value表示基於當前行向上(取負值)或向下(取正值)移動的行數。當mode的值為‘absolute’,value表示基於第一行資料(位置為0)向下移動的行數。
  • 物件的屬性:

    • rowcount只讀屬性,表示最近一次execute()執行後受影響的行數
    • connection獲得當前連線物件

4.示例

  • 增加、修改、刪除一條學生表資料

    # coding = utf-8
    
    import pymysql
    
    con = pymysql.connect(host='localhost',port=3306,user='root',password='123',db='test',charset='utf8') # 建立connect物件
    cur = conn.cursor() #建立cursor物件
    name = input('請輸入新增的學生姓名:')
    sql1 = 'insert into students(name) values(%s);'
    sql2 = 'delete from students where name = "老王";'
    sql3 = 'update students set name = “老張” where name = "老李";'
    try:
        cur.execute(sql1,[name]) #增加一條資料
        cur.execute(sql2) #刪除一條資料
        cur.execute(sql3) #修改一條資料
    except Exception as e:
        print(e)
        con.rollback() # 放棄之前的所有操作
    else:
        con.commit() # 提交,使所有操作生效
    cur.close() # 關閉cursor物件
    con.close() # 關閉連線
  • 查詢一條學生表資料以及剩下的多行資料

    # coding = utf-8
    
    import pymysql
    
    con = pymysql.connect(host='localhost',port=3306,user='root',password='123',db='test',charset='utf8') # 建立connect物件
    cur = conn.cursor() #建立cursor物件
    try:
        sql = 'select * from students;'
        count = cur.execute(sql)
        data1 = cur.fetchone() #查詢第一行資料
        print(data1)
        data2 = cur.fetchall() # 查詢剩下所有行資料
        print(data2)
    except Exception as e:
        print(e)
    cur.close()
    con.close()