python3連接MySQL數據庫,並執行數據庫的基本增刪改查操作

本篇爲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會自動幫我們關閉'''

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章