1. 程式人生 > >python學習筆記-day7-【python操作數據庫】

python學習筆記-day7-【python操作數據庫】

ngs pass insert commit def err 需要 range 執行

上次說到了Python操作數據庫,這裏繼續補充python操作數據庫,如何獲取數據表裏的所有字段值以及將數據導出來到excel裏,作為excel表表頭。

一、上次說到封裝一下mysql的操作

1、裝一下函數執行數據庫操作
#封裝一下函數執行數據庫操作
def my_db(host,user, passwd, db,sql, port=3306, charset=‘utf8‘):
import pymysql
conn = pymysql.connect(user=user,host=host,port=port,passwd=passwd,db=db,charset=charset)
cur = conn.cursor() #建立遊標
cur.execute(sql) #執行mysql
# res =cur.execute(‘select * from nhy WHERE username="xxx" and passwd="12345"‘)
username = ‘xxxxxx‘
passwd = ‘123456‘
sql = ‘select * from table_name where name="%s" and passwd="%s"‘ % (username, passwd)
res = cur.execute(sql)
if sql.strip()[:6].upper() == ‘SELECT‘:
res = cur.fetchall() #res返回的是一個list
if res:
print(‘用戶已經存在.‘)
else:
print(‘用戶不存在‘)
else:
conn.commit()
res = ‘ok‘
cur.close()
conn.close()
return res

這裏的res = cur.fetchall() #res返回的是一個list
如果需要獲取結果集,則需要遍歷整個二維數組。

二、可以指定返回的結果類型,則需要在建立遊標時,指定為dict類型的,如下:
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立遊標的時候,指定了遊標類型 ,返回就是一個字典了

1、具體用法

import pymysql
def my_db(sql, port=3306, charset=‘utf8‘):
import pymysql
host, user, passwd, db = ‘127.0.0.1‘,‘xxx‘,‘xxxxx‘,‘xxxx‘

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

cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立遊標的時候,指定了遊標類型 ,返回就是一個字典了
cur.execute(sql) #執行mysql
if sql.strip()[:6].upper() == ‘SELECT‘:
res = ‘‘
res = cur.fetchall() #res返回的是一個list
print(res)
# res = cur.fetchone()
# print(cur.fetchone())
# print(cur.fetchone())
# cur.fetchmany() #能傳入一個數,返回多少條數據

# fetchall() #獲取到這個sql執行的全部結果,它把數據庫裏的每一行數據放到一個List裏面

# [[‘1‘,‘2‘,‘3‘]] [{} {} {}]
#fetchone() #獲取到這個sql執行的一條結果,它返回就只是一條數據
#如果sql語句執行的結果是多條數據的時候,那就用fetchall()
#如果能確定sql執行的結果是只有一條數據的時候,那就和fetchone()

# print(cur.description)# 獲取到的是數據表的字段描述
#((‘id‘, 3, None, 11, 11, 0, True), (‘name‘, 253, None, 20, 20, 0, True), (‘sex‘, 253, None, 20, 20, 0, True))
#取表頭
# fileds = []
# for filed in cur.description:
# fileds.append(filed[0])
fileds = [ filed[0] for filed in cur.description ] #列表生成式,與上面的結果一樣
print(fileds)
# return fileds
return res

else:
conn.commit()
res = ‘ok‘
cur.close()
conn.close()
return res

sql= ‘select * from stu limit 10;‘
res = my_db(sql)
print(res)

結果如下:
  res = cur.fetchall() #res返回的是一個list
print(res)

[{‘id‘: 1, ‘name‘: ‘娜娜‘, ‘sex‘: ‘女‘}, {‘id‘: 1, ‘name‘: ‘娜娜‘, ‘sex‘: ‘女‘}]

fileds = [ filed[0] for filed in cur.description ] #列表生成式,與上面的結果一樣
print(fileds)
結果如下:
[‘id‘, ‘name‘, ‘sex‘]

2、查看具本體的幫助方法

print(
dir(pymysql.cursors) #這個可以打印出來ymysql.cursors都有哪些方法
)

結果:
[‘Cursor‘, ‘DictCursor‘, ‘DictCursorMixin‘, ‘PY2‘, ‘RE_INSERT_VALUES‘, ‘SSCursor‘, ‘SSDictCursor‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘absolute_import‘, ‘err‘, ‘partial‘, ‘print_function‘, ‘range_type‘, ‘re‘, ‘text_type‘, ‘warnings‘]


python學習筆記-day7-【python操作數據庫】