本篇爲python連接數據庫的詳細說明,如果急需用python連接數據庫,請看這篇模板文章python3連接MySQL數據庫模板
python3連接MySQL數據庫我們需要安裝pymysql
pip install pymysql
安裝好後直接import pymysql
就可以導入第三方庫
連接數據庫
conn = pymysql.connect(
host="localhost", # 指示host表明是本地MySQL還是遠程
user="root", # 用戶名
password="root", # 密碼
db="db4", # 要連接的數據庫名
charset="utf8mb4", # 指定字符集,可以解決中文亂碼
cursorclass=pymysql.cursors.DictCursor # 固定寫法,類似於jdbc裏邊的加載驅動
)
數據庫增刪改查(簡單寫法)
在連接了數據庫之後我們就要進行數據庫的增刪改查
"""
查
"""
sql = "select * from user"
cursor = conn.cursor() # 創建一個名爲cursor的指針對象
result = cursor.execute(sql) # 執行查詢操作,返回的result是受影響的行數
data = cursor.fetchone() #該方法是獲取數據庫結果的第一條數據,用元祖表示,若沒有則是null (在python中用None表示)
datas = cursor.fetchall() # 該方法得到查詢的所有結果,用元祖表示出來
# 進行數據處理,數據處理完就可以關閉指針和鏈接
curosr.close()
conn.close()
'''
如果sql語句中有可變的參數可以進行一下方式的處理
'''
sql = "select * from user where id = %s" % 23 # python的字符串處理
'''
不過這種處理方式容易產生sql注入問題
execute()這個方法其實留有參數的位置,execute(sql語句, 參數位置)
所以我們可以寫作如下
'''
sql = "select * from user where id = %s and username = %s"
cursor = conn.cursor()
result = cursor.execute(sql, (12, 'zhangsan'))
# 這樣就可以有效防止sql注入,或者我們也可以寫做如下
sql = cursor.mogrify(select * from user where id = %s and username=%s, (12, 'zhangsan'))
cursor = conn.cursor()
result = cursor.execute(sql)
"""
增
"""
conn = pymysql.connect(
host="localhost",
user="root",
password="root",
db="db4",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor
)
cursor = conn.cursor()
sql = "insert into user (username, password) values(%s, %s)"
result = cursor.execute(sql, ("zhangsan", "123456"))
conn.commit() ''' 注意這裏要提交事務,纔可以插入成功 '''
cursor.close()
conn.close()
'''值得一提的是。pymysql還提供了executemany()這個神奇的方法,可以一次插入很多條數據'''
'''如下所示'''
sql = "insert into user (username, password) values(%s, %s)"
params = [('zhanshen','123'), ('lemon', '123'), ('wangsi', '1234')]
result = cursor.executemany(sql, params)
cursor.close()
conn.close()
'''這裏的params可以是一個大列表,裏邊是一個個的元祖參數,或者也可以是一個大元祖,裏邊是元祖參數'''
params = cursor.
"""
改
"""
conn = pymysql.connect(
host="localhost",
user="root",
password="root",
db="db4",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor
)
cursor = conn.cursor()
sql = "update user set password = %s where username = %s"
result = cursor.execute(sql, ("zhangsan", "123456"))
conn.commit()
cursor.close()
conn.close()
''' 這裏並沒有什麼特別需要注意的,和insert方法一樣,刪也是一個道理(偷懶省去,滑稽) '''
下面我們可以用with as
來改善代碼
conn = pymysql.connect(
host="localhost",
user="root",
password="root",
db="db4",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor
)
try:
with conn.cursor() as cursor:
sql = "select * from user"
result = cursor.execute(sql)
print(result)
with conn.cursor() as cursor:
sql = "insert into user (username, password) values (%s, %s)"
result = cursor.execute(sql, ('zhanshen', '123'))
conn.commit()
finally:
conn.close()
'''有木有發現用了with as就可以不用關閉cursor,因爲with as會自動幫我們關閉'''