人生苦短_我用Python_pymysql库对Mysql数据库操作_009

# coding=utf-8

import pymysql

'''
数据库的登录信息:
    config={
        'host':'118.126.108.xxx',  # :主机
        'user':'python',  # :用户名
        'password':'pythonxxx',    #:密码
        'port':3306,    # :端口
        'database':'test_demo'    # :库名
    }


'''

config = {
    'host': '118.111.299.173',  # :主机
    'user': 'python',  # :用户名
    'password': 'python111',  #:密码
    'port': 3306,  # :端口
    'database': 'test_mmr'  # :库名
}

# : 登录上mysql
cnn = pymysql.connect(**config)  # kwargs

# 游标   --->>cursor  ->获取操作数据库的权限
cursor = cnn.cursor()

# 增删改查 --->对于用户来说,查询/新增/更新/删除操作是经常用的

# 查询: select
sql = 'SELECT * FROM  student a WHERE a.id=2 '

# 传参 :  元组

'''
查询sql的传参必须是以元组的形式传参
'''
# -----------
'''
元组传参
:  单个参数
sql = 'select * from  student a WHERE a.id=%s'
data = (2,)
cursor.execute(sql, data)

:  多个参数
sql_1 = 'select * from  student s WHERE s.id=%s and s.age=%s'
data = (2, 20)
cursor.execute(sql_1, data)
'''

'''
单条插入语句  insert
如果是insert语句的话,cursor.execute(sql,data)
一定要后面加上Commit提交操作
sql_insert = 'INSERT INTO  student(age,name) VALUES (%s,%s)'
data = (19, 'mr.chen')
cursor.execute('commit')

多条插入语句  insert,cursor.executemany方法
以列表的类型插入
insert_datas = [(12, 'mr.chen1'), (13, 'mr.chen2')]
sql_insert = 'INSERT INTO student(age,name) VALUES (%s,%s)'
# 执行语句
cursor.executemany(sql_insert, insert_datas)
cursor.execute('commit')

# dict 字典传参方式
sql_insert_dict='INSERT INTO student(age,name) VALUES (%(age)s,%(name)s)'  # 为什么要这样写?,因为字典是无序的,要通过key去指定
dict_data={'age':20,'name':'ChenYs'}
cursor.execute(sql_insert_dict, dict_data)
cursor.execute('commit')


'''

sql_insert_dict = 'INSERT INTO student(age,name) VALUES (%(age)s,%(NAME)s)'  # 为什么要这样写?,因为字典是无序的,要通过key去指定
dict_data = {'age': 29, 'name': 'ChenYs.1'}
cursor.execute(sql_insert_dict, dict_data)
# cursor.execute(sql)
cnn.commit()
# fetchone,fetchall 读取sql语句执行的结果
# res_sql_one = cursor.fetchone()
# res_sql_all = cursor.fetchall()

# :针对的是查询结果
# fetchone :执行一条sql语句
# fetchall :执行多条sql语句
# 如果查询结果对象有多条数据的话,一定要用fetchall,
# 不然用fetchone的话,只能从查询结果中读取一条数据出来,还会返回错误提示还有剩余数据未读
# print("one的数据:", res_sql_one)
# print("all的数据:", res_sql_all)

cursor.close()  # : 关闭游标
cnn.close()  # :  关闭数据库连接

'''
Ps:
    (select)   查询sql传参只能以元组的形式传,用fetchone和fetchall方法查看执行结果(fetchone/fetchall只适合查询)
    
    (insert)   单条插入sql传参也是以元组的形式传,insert_data=('param_a','param_a')
               多条插入sql传参是以列表的形式传,insert_data_s=[('param_a','param_b'),('param_aa','param_bb')]
               最后是用cursor.executemany()方法
               单条插入sql传参也支持dict的形式传,dict_data = {'age': 20, 'name': 'ChenYs'}
    
Update,Delete同Inset语句一个道理
'''