pymysql

pymysql

一、概念

pymysql是一個支持 python 的連接mysql 的庫

二、SQL語句

建庫:

"CREATE DATABASE IF NOT EXISTS mingyue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;"

case insensitive 大小寫不敏感

刪庫:

DROP DATABASE  mingyue

建表:

 CREATE TABLE user(
            id int(11) DEFAULT NULL ,
            name VARCHAR(50) DEFAULT NULL ,
            password VARCHAR(30) DEFAULT NULL ,
            birthday TIMESTAMP DEFAULT now() 
        )engine=innodb DEFAULT CHARACTER set utf8;
    '''

插入數據(一條記錄):

"INSERT INTO students(id,name,age) VALUES(%s,%s,%s)"

更新數據(根據where更新部分字段)

"UPDATE students SET age = %s WHERE  name =%s "

主鍵存在則更新,不存在則插入

"INSERT INTO {table}({keys})VALUES ({values}) ON DUPLICATE KEY UPDATE".format(table=table,keys=keys,values=values)

刪除數據(根據condition 刪除一條記錄

 "DELETE FROM {table} WHERE {condition}".format(table=table,condition=condition)

三、代碼

總結:

1、 過程

連接數據庫----- 獲得cursor------- 整理數據data的key,value ------構造執行SQL語句

2、 執行SQL語句構架:

    try:
         cursor.execute(sql,(id,name,age))
         conn.commit()
         print('insert data done')
     except pymysql.Error as e:
        conn.rollback()
         print(e.args[1],e.args[0])
         print('insert data failed')

3、 重點是 SQL語句的構造

import pymysql
# 建庫
try:
    conn=pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='123456'
    )
    cur=conn.cursor()
    create_database_sql='CREATE DATABASE IF NOT EXISTS mingyue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'
    # COLLATE utf8_general_ci 大小寫不敏感 case insensitive
    cur.execute(create_database_sql)
    cur.close()
    print('創建數據庫 mingyue 成功!')
except pymysql.Error as e:
    print('您好 pymysql.Error: ',e.args[0],e.args[1])

刪庫:

import pymysql
# 刪庫
try:
    conn=pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='123456',
        db = 'py3_tstgr'
    )
    cur=conn.cursor()
    drop_database_sql='DROP DATABASE  py3_tstgr '
    cur.execute(drop_database_sql)
    cur.close()
    print('刪除數據庫 py3_tstgr 成功!')
except pymysql.Error as e:
    print('pymysql.Error: ',e.args[0],e.args[1])

建表:

import pymysql
# 建表
try:
    conn=pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='123456',
        db='py3_tstgr',
        charset='utf8'
    )
    cur=conn.cursor()
    cur.execute('drop table if exists user;')
    create_table_sql='''
        CREATE TABLE user(
            id int(11) DEFAULT NULL ,
            name VARCHAR(50) DEFAULT NULL ,
            password VARCHAR(30) DEFAULT NULL ,
            birthday TIMESTAMP DEFAULT now() 
        )engine=innodb DEFAULT CHARACTER set utf8;
    '''
    cur.execute(create_table_sql)
    print('創建表成功!')
except pymysql.Error as e:
    coon.rollback()
    print('您好,mysql.Error: ',e.args[0],e.args[1]) 

import pymysql

#連接到本地MySQL,建立數據庫
def create_db():
    #建立連接
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123456'
    )
    #獲得cursor光標
    cursor = conn.cursor()
    cursor.execute('SELECT VERSION()')
    data = cursor.fetchall()
    print('database version:',data)
    #建立數據庫
    cursor.execute("CREATE DATABASE numb DEFAULT CHARACTER SET utf8")
    print('create database successfully !')
    conn.close()
    
#刪除數據庫
def drop_db():
    #建立連接
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123456',
        db='numb'
    )
    #獲得cursor光標
    cursor = conn.cursor()
    sql = "DROP DATABASE numb"
    try:
        cursor.execute(sql)
        print('drop database sucsessfully')
    except pymysql.Error as e:
        conn.rollback()
        print('failed drop database')
        print(e.args[0],e.args[1])
        
##建表
def create_table():
    #建立連接
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123456',
        db='numb'
    )
    #獲得cursor光標
    cursor = conn.cursor()
    sql = '''CREATE TABLE IF NOT EXISTS students(
    id VARCHAR(255) NOT NULL,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL,
    PRIMARY KEY(id)
    )
    '''
    try:
        cursor.execute(sql)
        conn.close()
        print('create table sucsefully')
    except pymysql.Error as e:
        print('failed create table')
        print(e.args[0],e.args[1])

#插入數據:
def insert_data():
     conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123456',
        db='numb'
    )
     cursor = conn.cursor()
     sql ="INSERT INTO students(id,name,age) VALUES(%s,%s,%s)"
     id = '001'
     name='bob'
     age=20
     #注意空客,注意數據類型,varchar 要加引號
     try:
         cursor.execute(sql,(id,name,age))
         conn.commit()
         print('insert data done')
     except pymysql.Error as e:
         print(e.args[1],e.args[0])
         conn.rollback()
         print('insert data failed')
         
#插入字典
def insert_dict():
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password ='123456',
        db = 'numb'
    )
    cursor = conn.cursor()
    data ={
        'id':'002',
        'name':'yue',
        'age':22
    }
    table = 'students'
    keys = ','.join(data.keys())
    #len計算的爲字段的多少
    values = ','.join(['%s']*len(data))
    sql = "INSERT INTO {table}({keys})VALUES({values})".format(table=table,keys=keys,values=values)
    #print('康康sql',sql)
    #康康sql INSERT INTO students(id,name,age)VALUES(%s,%s,%s)
    #執行
    try:
        #tuple()???????
        if cursor.execute(sql,tuple(data.values())):
            print('insert dict done')
            conn.commit()
    except pymysql.Error as e:
        conn.rollback()
        print('insert dict failed')
        print(e.args[0],e.args[1])
        
#更新數據
def update_data():
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123456',
        db = 'numb'
    )
    cursor = conn.cursor()
    #SET後爲設置改動的值,where後爲條件,構造SQL語句,使用時傳入一個元組即可。
    sql = "UPDATE students SET age = %s WHERE  name =%s "
    try:
        cursor.execute(sql,(100,'bob'))
        conn.commit()
        print('update data done')
    except pymysql.Error as e:
        conn.rollback()
        print('updata data error')
        print(e.args[0],e.args[1])
    conn.close()
        

#主鍵存在更新,不存在插入
def smart_insert():
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123456',
        db = 'numb'
    )  
    cursor = conn.cursor()
    data = {
        'id':'001',
        'name':'jerry',
        'age':1        
    }
    table = 'students'
    keys = ','.join(data.keys())
    values = ','.join(['%s']*len(data))
    ######這一句SQL語句要求輸入兩份values值,一份是insert的,一份是update的。
    sql = "INSERT INTO {table}({keys})VALUES ({values}) ON DUPLICATE KEY UPDATE".format(table=table,keys=keys,values=values)
    print('第一個sql: ',sql)
    update  = ','.join([" {key}=%s".format(key=key) for key in data])
    #id=%s, name=%s, age=%s
    print('您好:updata',update)
    print(','.join(data.keys()))
    sql = sql+update
    print('第二個 sql =sql +update',sql)
    try:
        if cursor.execute(sql,tuple(data.values())*2):
            print('smart insert done')
            conn.commit()
    except pymysql.Error as e:
        conn.rollback()
        print('smart insert eror')
        print(e.args[0],e.args[1])
        
#刪除數據:
def delete_data():
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123456'
        db = 'numb'
    )
    cursor = conn.cursor()
    table = 'students'
    condition = 'name==jerry'
    sql = "DELETE FROM {table} WHERE {condition}".format(table=table,condition=condition)
    try:
        cursor.execute(sql)
        conn.commit()
        print('delete data done')
    except pymysql.Error as e:
        conn.rollback()
        print('failed delete  data')
        print(e.args[0],e.args[1])
        



if __name__ == "__main__":
    #create_db()
    #create_table()
    #insert_data()
    #insert_dict()
    #smart_insert()
    #update_data()
    delele_data()
    #drop_db()
    
    


    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章