PyMySQL的基本使用

昨天在李哥幫忙檢驗我學習效果的時候
我使用pymysql出現瞭如下的錯誤 python

python-module 'pymysql' has no attribute 'connect'

一出錯 我本能的想去看下是否是我沒鏈接成功 而後 pip3 install pymysql
不要起import的包名做爲文件名啊!!!mysql

所以,我總結了下pymysql的基本使用sql

1、PyMySQL介紹
PyMySQL是在 Python3.x 版本中用於鏈接 MySQL 服務器的一個庫,Python2中是使用mysqldb。數據庫

PyMySQL安裝服務器

pip3 install pymysql

建立連接的基本使用 學習

# 導入pymysql模塊
import pymysql

# 鏈接database
conn = pymysql.connect(
	host=「你的數據庫地址」, 
	user=「用戶名」,password=「密碼」,
	database=「數據庫名」,
	charset=「utf8」)

# 獲得一個能夠執行SQL語句的光標對象
cursor = conn.cursor()  # 執行完畢返回的結果集默認以元組顯示
# 獲得一個能夠執行SQL語句而且將結果做爲字典返回的遊標
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 定義要執行的SQL語句
sql = """
CREATE TABLE USER1 (
id INT auto_increment PRIMARY KEY ,
name CHAR(10) NOT NULL UNIQUE,
age TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8;  #注意:charset='utf8' 不能寫成utf-8
"""

# 執行SQL語句
cursor.execute(sql)

# 關閉光標對象
cursor.close()

# 關閉數據庫鏈接
conn.close()

 

在建連接以前,咱們須要作好一些前期工做:建庫建表fetch

下面例子中  我將使用我建好的庫:db= 'xing'spa

建好的userinfo表3d

 

簡單驗證功能對象

# pip3 install pymysql
import pymysql

user=input('user>>: ').strip()
pwd=input('password>>: ').strip()

# 創建連接
conn=pymysql.connect(
    host='192.168.0.103',#個人IP地址
    port=3306,   # 不是字符串不須要加引號。
    user='root',
    password='123',
    db='xing',
    charset='utf8'
)

# 拿到遊標
cursor=conn.cursor()

# 執行sql語句

sql='select * from userinfo where user = "%s" and pwd="%s"' % (user, pwd)
print(sql)
res=cursor.execute(sql)
print(res)

cursor.close()
conn.close()

# 進行判斷
if res:
    print('登陸成功')
else:
    print('登陸失敗')

  

輸出結果:

可是會有如下問題:輸入的SQL 語句被註釋了

或者是

 

這個時候以後 咱們能夠這樣解決

execute幫咱們作字符串拼接

# 將如下代碼
sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
res=cursor.execute(sql)
# 改成
sql="select * from userinfo where name=%s and password=%s" #%s須要去掉引號,pymysql會自動加上

res=cursor.execute(sql,[user,pwd])

 輸出結果:

 

2、增刪改查操做

添加多條數據

import pymysql

conn = pymysql.connect(
    host='192.168.0.103',
    port=3306,
    user='root',
    password='123',
    database='xing',
    charset='utf8'
)
# 獲取一個光標
cursor = conn.cursor()

# 定義要執行的sql語句
sql = 'insert into userinfo(user,pwd) values(%s,%s);'
data = [
    ('july', '147'),
    ('june', '258'),
    ('marin', '369')
]
# 拼接並執行sql語句
cursor.executemany(sql, data)

# 涉及寫操做要注意提交
conn.commit()

# 關閉鏈接
cursor.close()
conn.close()

輸出結果:

插入單條數據
import pymysql
conn =pymysql.connect(
    host ='192.168.0.103',
    port = 3306,
    user = 'root',
    password ='123',
    database ='xing',
    charset ='utf8'
)
cursor =conn.cursor()  #獲取一個光標
sql ='insert into userinfo (user,pwd) values (%s,%s);'

name = 'wuli'
pwd = '123456789'
cursor.execute(sql, [name, pwd])
conn.commit()
cursor.close()
conn.close()

 輸出結果:

 

 

獲取最新插入數據 (最後一條)

import pymysql

# 創建鏈接
conn = pymysql.connect(
    host="192.168.0.103",
    port=3306,
    user="root",
    password="123",
    database="xing",
    charset="utf8"
)
# 獲取一個光標
cursor = conn.cursor()
# 定義將要執行的SQL語句
sql = "insert into userinfo (user, pwd) values (%s, %s);"
name = "wuli"
pwd = "123456789"
# 並執行SQL語句
cursor.execute(sql, [name, pwd])
# 涉及寫操做注意要提交
conn.commit()
# 關閉鏈接

# 獲取最新的那一條數據的ID
last_id = cursor.lastrowid
print("最後一條數據的ID是:", last_id)

cursor.close()
conn.close()

輸出結果爲:(由於我以前插入多條記錄時,多運行了兩次,全部結果下面的這個)

 

  刪除操做

import pymysql

# 創建鏈接
conn = pymysql.connect(
    host="192.168.0.103",
    port=3306,
    user="root",
    password="123",
    database="xing",
    charset="utf8"
)
# 獲取一個光標
cursor = conn.cursor()
# 定義將要執行的SQL語句
sql = "delete from userinfo where user=%s;"
name = "june"
# 拼接並執行SQL語句
cursor.execute(sql, [name])
# 涉及寫操做注意要提交
conn.commit()
# 關閉鏈接

cursor.close()
conn.close()

輸出結果是:

更改數據
import pymysql

# 創建鏈接
conn = pymysql.connect(
    host="192.168.0.103",
    port=3306,
    user="root",
    password="123",
    database="xing",
    charset="utf8"
)
# 獲取一個光標
cursor = conn.cursor()
# 定義將要執行的SQL語句
sql = "update userinfo set pwd=%s where user=%s;"
# 拼接並執行SQL語句
cursor.execute(sql, ["july", "july"])

# 涉及寫操做注意要提交
conn.commit()

# 關閉鏈接
cursor.close ()
conn.close ()



查詢數據
fetch數據
import pymysql

conn = pymysql.connect (
    host='192.168.0.103',
    port=3306,
    user='root',
    password='123',
    database='xing',
    charset='utf8'
)
# 獲取一個光標
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 返回字典數據類型

# 定義將要執行的sql語句
sql = 'select user,pwd from userinfo;'
# 拼接並執行sql語句
cursor.execute(sql)

# 取到查詢結果
ret1 = cursor.fetchone()  # 取一條
ret2 = cursor.fetchmany(3)  # 取三條
ret3 = cursor.fetchone()  # 取一條

cursor.close()
conn.close()

print(ret1)
print(ret2)
print(ret3)  
 
# 能夠獲取指定數量的數據
cursor.fetchmany(3)
# 光標按絕對位置移動1
cursor.scroll(1, mode="absolute")
# 光標按照相對位置(當前位置)移動1
cursor.scroll(1, mode="relative")
 
數據回滾
import pymysql

# 創建鏈接
conn = pymysql.connect(
    host="192.168.0.103",
    port=3306,
    user="root",
    password="123",
    database="xing",
    charset="utf8"
)
# 獲取一個光標
cursor = conn.cursor()
# 定義將要執行的SQL語句
sql1 = "insert into userinfo (user, pwd) values (%s, %s);"
sql2 = "insert into hobby (id, hobby) values (%s,%s);"
user = "july1"
pwd = "july1"
id = "我是錯誤的id"  #id = "3"
hobby = "打遊戲"
try:
    # 拼接並執行SQL語句
    cursor.execute(sql1, [user, pwd])
    print(sql1)
    cursor.execute(sql2, [id, hobby])  # 報錯的SQL語句
    # 涉及寫操做注意要提交
    conn.commit()
except Exception as e:
    print(str(e))
    # 有異常就回滾
    conn.rollback()

# 關閉鏈接
cursor.close()
conn.close()
 
 

相關文章
相關標籤/搜索