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

python基礎:Python MySQL

編輯:Python

Python MySQL

  • mysql入門
    • MySQL 數據庫
    • 安裝 MySQL 驅動程序
    • 測試 MySQL Connector
    • 創建連接
  • 創建數據庫
    • 創建數據庫
    • 檢查數據庫是否存在
  • 創建表
    • 創建表
    • 檢查表是否存在
    • 主鍵
  • 插入表(`Insert`)
    • INSERT INTO
    • **插入多行**
    • **活動已插入的id**
  • Python Select From
    • 從表中選取
    • 選取列
    • 使用 fetchone() 方法
  • Python MySQL Where
    • 使用篩選器來選取
    • 通配符
    • 防止 SQL 注入
  • Python MySQL Order By
    • 結果排序
    • 降序排序
  • Python MySQL Delete From
    • 刪除記錄
    • 防止 [SQL 注入](https://blog.csdn.net/weixin_51047454/article/details/123533237?spm=1001.2014.3001.5501)
  • Python MySQL Drop Table
    • 刪除表
    • 只在表存在時刪除
  • Python 更新表
    • 更新表
    • 防止 SQL 注入
  • Python MySQL Limit
    • 限定結果
    • 從另一個位置開始

mysql入門

MySQL 數據庫

為了能夠試驗本教程中的代碼示例,應該在計算機上安裝 MySQL。
請在這裡下載免費的 MySQL 數據庫:下載地址。

安裝 MySQL 驅動程序

Python 需要 MySQL 驅動程序來訪問 MySQL 數據庫。
在本教程中,我們將使用驅動程序 “MySQL Connector”。
我們建議使用 PIP 安裝 “MySQL Connector”。
PIP 很可能已經安裝在 Python 環境中。
將命令行導航到 PIP 的位置,然後鍵入以下內容:
下載並安裝 “MySQL Connector”:

python -m pip install mysql-connector

測試 MySQL Connector

如需測試安裝是否成功,或者是否已安裝 “MySQL Connector”,運行下面代碼,若無報錯就表示安裝成功:

import mysql.connector

創建連接

首先創建與數據庫的連接。
使用 MySQL 數據庫中的用戶名和密碼:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword"
)
print(mydb)

創建數據庫

創建數據庫

如需在 MySQL 中創建數據庫,請使用 “CREATE DATABASE” 語句:

創建名為“zdz”的數據庫

import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword"
)
mycursor=mydb.cursor()
mycursor.execute("create database zdz")

(mydb和mycursor為變量)

檢查數據庫是否存在

可以通過使用“SHOW DATABASES”語句列出系統中所有數據庫:

import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword"
)
mycursor=mydb.cursor()
mycursor.execute("show databases")
for x in mycursor:
print(x)


或者通過在建立連接時嘗試訪問數據庫:

import mysql.connector
mydb=mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)

如果不錯在名為“zdz”的數據庫,會返回錯誤。

創建表

創建表

如需在 MySQL 中創建表,請使用 “CREATE TABLE” 語句。
(請確保在創建連接時定義數據庫的名稱。)

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE biao1 (id int(10),name varchar(10),passwd varchar(10))")
#sql語法:create table 表名(字段1名 字段1類型,字段2名 字段2類型,字段3名 字段3類型);

檢查表是否存在

可以通過使用 “SHOW TABLES” 語句列出數據庫中的所有表,來檢查表是否存在:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW TABLES")
for x in mycursor:
print(x)

主鍵

創建表時,還應該為每條記錄創建一個具有唯一鍵的列。
這可以通過定義 PRIMARY KEY 來完成。
我們使用語句 “INT AUTO_INCREMENT PRIMARY KEY”,它將為每條記錄插入唯一的編號。從 1 開始,每個記錄遞增 1。

1、創建表時創建主鍵:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE biao2 (id int auto_increment primary key,name varchar(10),passwd varchar(10))")
#這裡把主鍵給到“id”

2、如果表已存在,請使用 ALTER TABLE 關鍵字:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("alter table biao1 add column idid int auto_increment primary key")

插入表(Insert

INSERT INTO

如需填充 MySQL 中的表,請使用 “INSERT INTO” 語句。
在表 “biao1” 中插入記錄:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)
mycursor = mydb.cursor()
sql = "insert into biao1 (id,name, passwd) values ('1','admin','admin)"
mycursor.execute(sql)
#或者寫成:
#sql = "insert into biao1 (id,name,passwd) values (%s,%s,%s)"
#val = ('1','admin','admin')
#mycursor.execute(sql,val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")

重要:請注意語句 mydb.commit()。需要進行更改,否則表不會有任何改變。

插入多行

要在表中插入多行,請使用 executemany() 方法。
executemany() 方法的第二個參數是元組列表,包含要插入的數據:

用數據填充biao2:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)
mycursor = mydb.cursor()
sql = "insert into biao2 (name, passwd) VALUES (%s, %s)"
val = [
('zdz','zdz32'),
('bh','bh01'),
('mjw','mjw16'),
('zxr','zxr42'),
('zyc','zyc43')
]
mycursor.executemany(sql, val)
mydb.commit()
print(mycursor.rowcount, "was inserted.")

活動已插入的id

可以通過詢問 cursor 對象來獲取剛插入的行的 id。
注釋:如果插入不止一行,則返回最後插入行的 id。

插入一行並返回id:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)
mycursor = mydb.cursor()
sql = "INSERT INTO biao2 (name,passwd) VALUES (%s, %s)"
val = ("admin", "admin666")
mycursor.execute(sql, val)
mydb.commit()
print("1 record inserted, ID:", mycursor.lastrowid)

Python Select From

從表中選取

從表 “biao2” 中選取所有記錄,並顯示結果:

import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="zdz"
)
mycursor = mydb.cursor()#和前面一樣,下面為了簡潔統統省略
mycursor.execute("SELECT * FROM biao2")#執行sql語句,結果賦給mycursor
myresult = mycursor.fetchall()#用了 fetchall() 方法,該方法從最後執行的語句中獲取所有行,結果賦給myresult。
for x in myresult:
print(x)#遍歷myresult結果(下面為了簡潔統統省略)


+fetchall() 方法:從最後執行的語句中獲取所有行

選取列

如需只選擇表中的某些列,請使用 “SELECT” 語句,後跟列名:
僅選擇名稱和地址列:

...
mycursor.execute("SELECT id,name,passwd FROM biao2")
...

使用 fetchone() 方法

如果只對一行感興趣,可以使用 fetchone() 方法。fetchone() 方法將返回結果的第一行

...
mycursor.execute("SELECT * FROM biao2")
myresult = mycursor.fetchone()
print(myresult)#只返回一行,所以不用遍歷

Python MySQL Where

使用篩選器來選取

從表中選擇記錄時,可以使用 “where” 語句對選擇進行篩選:

...
sql = "SELECT * FROM biao2 WHERE name='zyc'"
mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:
print(x)#因為匹配條件的可能不止一條,所以需要遍歷輸出

通配符

也可以選擇以給定字母或短語開頭、包含或結束的記錄。請使用 表示通配符。
查找密碼中包含"2"的記錄:

...
sql = "SELECT * FROM biao2 WHERE passwd LIKE '%1%'"
mycursor.execute(sql)
myresult = mycursor.fetchall()
...

防止 SQL 注入

當用戶提供查詢值時,應該轉義這些值。此舉是為了防止 SQL 注入,這是一種常見的網絡黑客技術,可以破壞或濫用你的數據庫
mysql.connector 模塊擁有轉義查詢值的方法,
使用占位符 %s 方法來轉義查詢值:

...
sql = "SELECT * FROM customers WHERE passwd=%s"
pas = ("admin666", )
mycursor.execute(sql,pas)
myresult = mycursor.fetchall()
...


sql注入教程——>傳送門

Python MySQL Order By

結果排序

請使用 ORDER BY 語句按升序或降序對結果進行排序。(ORDER BY 關鍵字默認按升序對結果進行排序。若要按降序對結果進行排序,請使用 DESC 關鍵字。)
以字符順序對姓名進行排序:

...
mycursor.execute("SELECT * FROM biao2 ORDER BY name")
...

降序排序

請使用 DESC 關鍵字按降序對結果進行排序:

...
mycursor.execute("SELECT * FROM biao2 ORDER BY id DESC")
...

Python MySQL Delete From

刪除記錄

可以使用 “DELETE FROM” 語句從已有的表中刪除記錄:

...
mycursor.execute("DELETE FROM biao2 WHERE name = 'admin'")
mydb.commit()
...

注意
1.請注意語句 mydb.commit()。需要進行更改,否則表不會有任何改變。
2.請注意 DELETE 語法中的 WHERE 子句:WHERE 子句指定應刪除哪些記錄。如果省略 WHERE 子句,則將刪除所有記錄!

防止 SQL 注入

*在 delete 語句中,轉義任何查詢的值也是一種好習慣。此舉是為了防止 SQL 注入,這是一種常見的網絡黑客技術,可以破壞或濫用你的數據庫。
mysql.connector 模塊使用占位符 %s 來轉義 delete 語句中的值:

...
sql = "DELETE FROM biao2 WHERE passwd = %s"
pas = ("ylj31", )
mycursor.execute(sql,pas)
mydb.commit()
...

Python MySQL Drop Table

刪除表

可以使用 “DROP TABLE” 語句來刪除已有的表。
刪除 “biao1” 表:

...
mycursor.execute("DROP TABLE biao1")

只在表存在時刪除

如果要刪除的表已被刪除,或者由於任何其他原因不存在,那麼可以使用 IF EXISTS 關鍵字以避免出錯:

mycursor.execute("DROP TABLE IF EXISTS biao1")#添加'IF EXITS判斷'

Python 更新表

更新表

可以使用 “UPDATE” 語句來更新表中的現有記錄。
把密碼列中的 “zdz32” 覆蓋為 “zdz3232”:

...
mycursor.execute("UPDATE biao2 SET passwd='zdz3232' WHERE passwd='zdz32'")
mydb.commit()#要有
print(mycursor.rowcount, "record(s) affected")

注意:請注意 UPDATE 語法中的 WHERE 子句:WHERE 子句指定應更新的記錄。如果省略 WHERE 子句,則所有記錄都將更新!

防止 SQL 注入

同上,在update語句中要有轉義的好習慣,防止sql注入。
mysql.connector 模塊使用占位符 %s 來轉義update 語句中的值:

sql = "UPDATE biao2 SET passwd= %s WHERE passwd = %s"
pas = ("pzdz32", "zdz3232")
mycursor.execute(sql,pas)
mydb.commit()

Python MySQL Limit

限定結果

可以使用 “LIMIT” 語句限制從查詢返回的記錄數。
選取 “biao2” 表中的前四條記錄:

mycursor.execute("SELECT * FROM biao2 LIMIT 4")
myresult = mycursor.fetchall()#記得遍歷輸出

從另一個位置開始

如果想從第二條記錄開始返回四條記錄,您可以使用 “OFFSET” 關鍵字:

mycursor.execute("SELECT * FROM biao2 LIMIT 4 OFFSET 1")#因為從0開始數,所以要從第二個開始,offset後面跟1
myresult = mycursor.fetchall()

先自我介紹一下,小編13年上師交大畢業,曾經在小公司待過,去過華為OPPO等大廠,18年進入阿裡,直到現在。深知大多數初中級java工程師,想要升技能,往往是需要自己摸索成長或是報班學習,但對於培訓機構動則近萬元的學費,著實壓力不小。自己不成體系的自學效率很低又漫長,而且容易碰到天花板技術停止不前。因此我收集了一份《java開發全套學習資料》送給大家,初衷也很簡單,就是希望幫助到想自學又不知道該從何學起的朋友,同時減輕大家的負擔。添加下方名片,即可獲取全套學習資料哦


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