為了能夠試驗本教程中的代碼示例,應該在計算機上安裝 MySQL。
請在這裡下載免費的 MySQL 數據庫:下載地址。
Python 需要 MySQL 驅動程序來訪問 MySQL 數據庫。
在本教程中,我們將使用驅動程序 “MySQL Connector”。
我們建議使用 PIP 安裝 “MySQL Connector”。
PIP 很可能已經安裝在 Python 環境中。
將命令行導航到 PIP 的位置,然後鍵入以下內容:
下載並安裝 “MySQL Connector”:
python -m pip install 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
)如需填充 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.")
可以通過詢問 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)
從表 “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() 方法將返回結果的第一行:
...
mycursor.execute("SELECT * FROM biao2")
myresult = mycursor.fetchone()
print(myresult)#只返回一行,所以不用遍歷
從表中選擇記錄時,可以使用 “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 注入,這是一種常見的網絡黑客技術,可以破壞或濫用你的數據庫
mysql.connector 模塊擁有轉義查詢值的方法,例
:
使用占位符 %s
方法來轉義查詢值:
...
sql = "SELECT * FROM customers WHERE passwd=%s"
pas = ("admin666", )
mycursor.execute(sql,pas)
myresult = mycursor.fetchall()
...
sql注入教程——>傳送門
請使用 ORDER BY
語句按升序或降序對結果進行排序。(ORDER BY 關鍵字默認按升序對結果進行排序。若要按降序對結果進行排序,請使用 DESC
關鍵字。)
以字符順序對姓名進行排序:
...
mycursor.execute("SELECT * FROM biao2 ORDER BY name")
...
請使用 DESC
關鍵字按降序對結果進行排序:
...
mycursor.execute("SELECT * FROM biao2 ORDER BY id DESC")
...
可以使用 “DELETE FROM
” 語句從已有的表中刪除記錄:
...
mycursor.execute("DELETE FROM biao2 WHERE name = 'admin'")
mydb.commit()
...
注意
:
1.請注意語句 mydb.commit()
。需要進行更改,否則表不會有任何改變。
2.請注意 DELETE 語法中的 WHERE 子句:WHERE 子句指定應刪除哪些記錄。如果省略 WHERE 子句,則將刪除所有記錄!
*在 delete 語句中,轉義任何查詢的值也是一種好習慣。此舉是為了防止 SQL 注入,這是一種常見的網絡黑客技術,可以破壞或濫用你的數據庫。
mysql.connector 模塊使用占位符 %s 來轉義 delete 語句中的值:
...
sql = "DELETE FROM biao2 WHERE passwd = %s"
pas = ("ylj31", )
mycursor.execute(sql,pas)
mydb.commit()
...
可以使用 “DROP TABLE
” 語句來刪除已有的表。
刪除 “biao1” 表:
...
mycursor.execute("DROP TABLE biao1")
如果要刪除的表已被刪除,或者由於任何其他原因不存在,那麼可以使用 IF EXISTS
關鍵字以避免出錯:
mycursor.execute("DROP TABLE IF EXISTS biao1")#添加'IF EXITS判斷'
可以使用 “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 子句,則所有記錄都將更新!
同上,在update語句中要有轉義的好習慣,防止sql注入。
mysql.connector 模塊使用占位符 %s 來轉義update 語句中的值:
sql = "UPDATE biao2 SET passwd= %s WHERE passwd = %s"
pas = ("pzdz32", "zdz3232")
mycursor.execute(sql,pas)
mydb.commit()
可以使用 “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開發全套學習資料》送給大家,初衷也很簡單,就是希望幫助到想自學又不知道該從何學起的朋友,同時減輕大家的負擔。添加下方名片,即可獲取全套學習資料哦