# 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语句一个道理
'''