程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python之操作mysql數據庫

編輯:Python

第三節–Python之操作mysql數據庫

提示:這裡可以添加系列文章的所有文章的目錄,目錄需要自己手動添加
這個章節主要講解使用python操作mysql數據庫


提示:寫完文章後,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 第三節–Python之操作mysql數據庫
  • 一、環境安裝
  • 二、使用步驟
    • 1.思路步驟
    • 2.操作數據庫<查>
    • 3.操作增刪改
    • 4.操作數據庫的封裝
  • 總結

一、環境安裝

提示:這裡可以添加本文要記錄的大概內容:

首先在本地安裝PyMySQL,安裝方式Win+R -->輸入cmd–>pip install PyMySQL

如果已經安裝過,就會出現像圖片中樣子。
然後再去網上下載mysql,和Navicat 就可以了。當然Navicat 可以用其他替代,因為我本地就安裝了這個軟件。Navicat 破解版本可以再網上查找,還是有很多的。


提示:以下是本篇文章正文內容,下面案例可供參考

二、使用步驟

1.思路步驟

1、首先建立數據庫的連接
2、生成游標
3、執行需要的數據庫語句
4、獲取查詢結果
5、關閉游標
6、關閉數據庫連接

2.操作數據庫<查>

接下來我們來用python進行數據庫的<查>這個操作,代碼如下

代碼如下(示例):

import pymysql
#連接數據庫
con=pymysql.connect(host='localhost',user='root',password='root',database='huace',charset='utf8')
# 創建游標
cur=con.cursor()
# 生成數據庫
sql='select * from sscore'
#獲取結果
cur.execute(sql)
# 獲取所有記錄 fetchall--獲取所有記錄 fetchmany--獲取多條記錄,需傳參 fetchone--獲取一條記錄
all=cur.fetchall()
# 輸出查詢結果
print(all)
# 關閉游標
cur.close()
# 關閉數據庫連接,目的為了釋放內存
cur.close()



這就成功啦。
我這裡說幾個注意點!!!
1、有的小伙伴執行運行出的結果可能都是’?‘,像圖片這樣

這個是因為pymysql.connect中的charset值與sql中的字符集不對應導致的。
那麼如何看sql中的字段是什麼字符集呢,我還是以Navicat 為例,如圖

小伙伴們可以試試把代碼中的charset='utf8’改為charset='utf-8’是不是會出現’?‘。
這裡順便我和大家解釋一下,這裡面幾個字段的意思 host–連接數據庫地址
user–數據庫登錄用戶名 ,password=數據庫登錄密碼,database=數據庫的庫名,charset=數據庫字符集 port–數據庫端口號 autocommit–事務提交,True是為自動提交 False為手動提交。
自行查看源碼,了解每個字段的意思,這個源碼查看有點繞,這裡我也圖片示范一下

源碼我復制到下面

 def __init__(self, host=None, user=None, password="",
database=None, port=0, unix_socket=None,
charset='', sql_mode=None,
read_default_file=None, conv=None, use_unicode=None,
client_flag=0, cursorclass=Cursor, init_command=None,
connect_timeout=10, ssl=None, read_default_group=None,
compress=None, named_pipe=None, no_delay=None,
autocommit=False, db=None, passwd=None, local_infile=False,
max_allowed_packet=16*1024*1024, defer_connect=False,
auth_plugin_map={}, read_timeout=None, write_timeout=None,
bind_address=None, binary_prefix=False):

注意點2、如果有些小伙伴運行代碼的時候輸出一個數值,可以查看一下是否cur.fetchall()獲取全部的這個語句。如果沒有,那麼控制台輸出的值就是表中數量,就是這個表有多條數據。

3.操作增刪改

代碼如下(示例):
增刪改,操作方式都一樣,只是sql語句的不同,這裡我就寫一個代碼中。這裡需要注意的點是,我們需要提交事務,如果不提交事務,語句是不執行的,我先來一個不提交事務的,顯示執行成功,但是表中並沒有新增


然後我們;對它進行添加事務提交。
方式有兩種,第一種在pymysql.connect中加上autocommit=True
第二種con.commit()
代碼如下,代碼上我使用的是第一種方法

import pymysql
#連接數據庫 第一種autocommit=True
con=pymysql.connect(host='localhost',user='root',password='root',database='huace',charset='utf8',autocommit=True)
# 創建游標
cur=con.cursor()
# 生成數據庫
sql='insert into sscore (name,class,socre) VALUES ("李四","語文",90)'
#獲取結果
cur.execute(sql)
#提交事務 方法二
# con.commit()
# 關閉游標
cur.close()
# 關閉數據庫連接,目的為了釋放內存
cur.close()

如果需要刪除,或者修改,只需修改sql語句就行了。

我們再講一下一次增加多條數據如何操作,方式也是兩種

import pymysql
#連接數據庫 第一種autocommit=True
con=pymysql.connect(host='localhost',user='root',password='root',database='huace',charset='utf8',autocommit=True)
# 創建游標
cur=con.cursor()
# # 方式一
# # 生成數據庫
# sql='insert into sscore (name,class,socre) VALUES ("李四","語文",90),("張六","語文",90)'
# #獲取結果
# cur.execute(sql)
# 方式二
sql2='insert into sscore (name,class,socre) VALUES (%s,%s,%s)'
data=[("李四","語文",91),("張六","語文",91)]
#獲取結果
cur.executemany(sql2,data)
#提交事務 方法二
# con.commit()
# 關閉游標
cur.close()
# 關閉數據庫連接,目的為了釋放內存
cur.close()

4.操作數據庫的封裝

今天太晚了,明天給補上,打打游戲睡覺了
來了來了 ,補上!!!

import pymysql
class Mysql_Object():
def __init__(self,host,user,password,database,port=3306,charset='utf8'):
self.host=host
self.user=user
self.password=password
self.database=database
self.port=port
self.charset=charset
def select_sql(self,sql,size=0):
'''
查詢sql語句
:param sql 傳入查詢的sql語句,字符串
:param size 返回結果的記錄條數,如果沒有輸入默認輸出全部條數
:return: self.count 返回查詢的記錄的總數,slef.res 返回查詢的結果
'''
self.con=pymysql.connect(host=self.host,user=self.user,password=self.password,database=self.database,port=self.port,charset=self.charset)
self.cur=self.con.cursor() #建立游標
self.sql=sql
# 判讀是否是查詢語句
if self.sql.startswith('select'):
self.cur.execute(self.sql) #獲取數據庫結果
self.count=self.cur.rowcount #統計查詢記錄數
# 通過if語句進行判斷
if size == 0:
self.res=self.cur.fetchall() #輸出全部結果
elif size != 0 :
self.res=self.cur.fetchmany(size) #輸出指定數值
self.cur.close()
self.con.close() #關閉連接
return self.count,self.res
def excute_sql(self,sql):
'''
:param sql 輸入增刪改的sql語句
:return:
'''
self.con = pymysql.connect(host=self.host, user=self.user, password=self.password,port=self.port, database=self.database,
charset=self.charset,autocommit=True)
self.cur = self.con.cursor() # 建立游標
self.sql = sql
if self.sql.startswith('insert'):
print('插入語句',self.sql)
self.cur.execute(self.sql) #執行語句
self.cur.close() #關閉連接
self.con.close()
if self.sql.startswith('delete'):
print('刪除語句',self.sql)
self.cur.execute(self.sql) # 執行語句
self.cur.close() # 關閉連接
self.con.close()
if self.sql.startswith('update'):
print('更新語句',self.sql)
self.cur.execute(self.sql) # 執行語句
self.cur.close() # 關閉連接
self.con.close()
# 調用
m=Mysql_Object('localhost','root','root','huace')
print(m.select_sql('select * from sscore',3))#查詢結果
m.excute_sql('update sscore set name="王六"where `name`="張三"' ) #更新語句
m.excute_sql('delete from sscore where name="李四"') #刪除語句
m.excute_sql('insert into sscore VALUES("趙七","英語","89")') #插入語句

控制台結果,如下

總結

提示:這裡對文章進行總結:

這些都是看視頻以後的一些總結,幫這個當作筆記本吧,將學習的內容簡單的梳理一下,因為現在居家隔離,正常情況可以每天一更吧,下下周就去新公司入職了,可能就不會更新這麼頻繁了,大家一起共同進步吧,如果哪裡有錯誤,或者不對的地方歡迎大家指出,畢竟剛學習不久還是有很多不足之處的。謝謝大家啦,覺得還行也可以點個贊哦!!!
後面我就陸續更新selenium框架了,python其他基礎,我有學習到陸續更新上來的


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved