python习题:操作mysql数据库,传入sql返回执行结果

import pymysql,json

def op_mysql(sql,host='211.149.218.16',
user='jxz',
password='123456',
db ='jxz',
port = 3306,
charset = 'utf8'):

conn = pymysql.connect(host=host,
user=user,
password=password,
db =db,
port = port,
charset = charset)

cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#指定curson的类型:字典类型,因为字典类型方便取值
    '''sql语句:select 不需要commit,但是需要用fetcheall或fetcheone,返回数据
update,insert,delect等是没有返回结果的,但是需要commit一下,所以需要进行判断'''

cur.execute(sql)#执行sql

sql_start =sql[:6].upper()#取sql语句字符串前六位,根据前六位进行下面的判断

if sql_start=='SELECT':
res_list = cur.fetchall()#查询的需要返回结果,因为指定了cursor的类型是字典型,所以执行结果保存为字典格式的list
        res = json.dumps(res_list,ensure_ascii=False) # 把list转换成json串的方式返回

# res = cur.fetchall() #json串的方式返回的是一个字符串,当我们需要用结果取值的时候,res返回的是一个 list 套 字典,方便取值进行后面操作,根据不同需求,更改不同的返回方式
    else:#除了查询语句之外,其他语句,均需要commit一下
conn.commit()
res = 'ok'

cur.close()
conn.close()
return res

if __name__ == '__main__': # 意思是,别人导入这个python文件的时候,下面的代码不会被执行,一般调试的时候用

sql = "select * from bt_stu limit 5;"
sql2 = "INSERT INTO `bt_stu` ( `real_name`, `sex`, `phone`, `class`, `type`) VALUES ( '赵四儿', '1', '17332881231', '靠山屯', '1');"
res = op_mysql(sql)
res2 = op_mysql(sql2)
print(res)
print(res2)

posted on 2018-01-21 16:01  爱睡觉的加菲猫  阅读(513)  评论(0编辑  收藏  举报

导航