python的mysql-connector和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() 



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]) 




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 ()




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()



python -m pip install mysql-connector




連接MySQL


  主要是使用mysql.connector模塊的connect函數,需要注意參數的名稱。


import mysql.connector
 
# 接收參數:user, password, host, port=3306, unix_socket and database
# 返回一個MySQLConnection Object
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='root',
    database='test'
)




執行SQL命令
  執行sql命令之前,需要先創建一個查詢,調用一下cursor()方法,這個方法名光標的意思,可以理解為,命令行中,執行sql語句之前,先要有一個光標行,在光標行中進行操作。


  調用cursor()返回的結果就是光標行(cmd,簡稱cmd),然后調用cmd的execute()方法,傳入要執行的sql即可,不過需要注意的是,執行sql的結果,執行的結果仍舊保存在cmd中。 




select查詢操作
  執行select操作,使用fetchall()一次性取回所有的結果集。


import mysql.connector
 
# 接收參數:user, password, host, port=3306, unix_socket and database
# 返回一個MySQLConnection Object
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='root',
    database='test'
)
 
# 創建一個查詢
cmd = conn.cursor()
 
# 執行一條原生的SQL語句,執行結果保存在cmd中,沒有返回值
cmd.execute("select id, name, age from stu")

# 可以使用fetchall(),獲取所有的查詢結果集,返回值為一個tuple,每一個元素是一個list

res = cmd.fetchall()

print(res)
# [(1, 'xinming', 20), (2, 'renmin', 30), (3, 'xi', 10)]




執行select操作,使用fetchone()每次只取一條記錄


import mysql.connector
 
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='root',
    database='test'
)
 
cmd = conn.cursor()
 
cmd.execute("select id, name, age from stu")
 
# 使用fetchone()返回一條結果集,每調用一次之后,內部指針會指向下一條結果集
print(cmd.fetchone()) # (1, 'xinming', 20)
print(cmd.fetchone()) # (2, 'renmin', 30)
print(cmd.fetchone()) # (3, 'xi', 10)




執行select操作,使用fetchmany(num)指定每次返回的num條結果集


import mysql.connector
 
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='root',
    database='test'
)
 
cmd = conn.cursor()
 
cmd.execute("select * from stu")
 
res = cmd.fetchmany(2)   # 指定返回2條記錄
print(res)
# [(1, 'xinming', 20), (2, 'renmin', 30)]
 
res = cmd.fetchmany(1)   # 指定返回1條記錄
print(res)
# [(3, 'xi', 10)]
  



insert、update、delete操作
  insert、update、delete操作,也都是使用execute方法,只需要將要執行的sql語句傳入即可。

  可以在執行增刪改操作之后,rowcount屬性保存着受影響的記錄數。


  每次插入一條數據



import mysql.connector
 
# 接收參數:user, password, host, port=3306, unix_socket and database
# 返回一個MySQLConnection Object
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='root',
    database='test'
)
 
# 創建一個查詢
cmd = conn.cursor()
 
# 執行原生SQL語句
cmd.execute("insert into stu (id, name, age) values (4, 'LiBai', 99)")

print(cmd.rowcount)  # 1
 
cmd.execute("select * from stu")
res = cmd.fetchall()
print(res)
# [(1, 'xinming', 20), (2, 'renmin', 30), (3, 'LiLei', 10), (4, 'LiBai', 99)] 






import mysql.connector
 
conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='root',
    database='test'
)
 
cmd = conn.cursor()
 
# 注意,在SQL中的占位符,統一寫%s, 具體的類型,是在tuple中,傳入的參數元素類型決定

cmd.execute("select * from stu where id=%s and name=%s", (1, 'xinming'))

res = cmd.fetchall()

print(res)
# [(1, 'xinming', 20)]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM