当前位置: 首页 > 工具软件 > PyMySQL > 使用案例 >

pymysql

邓高韵
2023-12-01

pymysql使用

1.下载pymysql

1.pip3 install pymysql
2.pycharm–>file–>settings–>Project Interpreter,将pymysql加进去

2.导入pymysql模块

import pymysql

3.创建链接及小例

#1.打开数据库连接

conn=pymysql.connect(host="127.0.0.1",port=3306,user=user,password=pwd,database="seu",charset="utf8")

host:数据库主机地址
post:mysql默认端口3306
user、password:mysql用户
database:打开的数据库名字
charset:以utf-8形式打开,注意写utf8
#创建游标,相当于cmd的光标
#2.使用cursor()创建一个游标对象cursor

cursor=conn.cursor()

#3.使用execute()执行一条mysql语句,并返回受影响的行数

effect_row=cursor.execute("select * from student")
print(effect_row)

effect_row打印出来是6,因为student此时一共有6条数据,都被查询;

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
 
# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""
 
cursor.execute(sql)

以上是execute()。

还可以使用executemany()执行多条语句并执行,并返回受影响行数

effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])

列表里数组的每个元素都必须是元组,并且python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作,因此上方插入完数据后需要加

conn.commit()

#4.执行完mysql语句操作后先关闭游标,再关闭连接
关闭游标:

cursor.close()

关闭连接:

conn.close()

4.获取最新数据的id

import pymysql
conn=pymysql.connect(host=host,user=username.password=pwd,database=databaseName,charset="utf8")
cursor=conn.cursor()
cursor.execute("insert into teacher (name,age,gender) values (%s,%s,%s)" ,("Mr.Chong", 40, "m"))
conn.commit()
last_id=cursor.lastrowid
print("最后一条数据的ID是:", last_id)
cursor.close()
conn.close()

5.try except使用

import pymysql
 
# 打开数据库连接
conn = pymysql.connect("localhost","testuser","test123","TESTDB" )
 
# 使用cursor()方法获取操作游标 
cursor = conn.cursor()
 
# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s',  %s,  '%s',  %s)" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # 执行sql语句
   cursor.execute(sql)
   # 执行sql语句
   conn.commit()
except:
   # 发生错误时回滚
   conn.rollback()
 
# 可以不关闭游标,直接关闭数据库连接
conn.close()

6.取数据语句:fetch

1.fetchone()、fetchmany()、fetchall()

import pymysql
  
conn = pymysql.connect(host='127.0.0.1', port=3306, user=user, passwd=pwd, db='teacher')
cursor = conn.cursor()
cursor.execute("select * from teacher")
  
# 获取第一行数据,返回元组:(1, 'Mr.Weng', 'woman', 38)
row_1 = cursor.fetchone()
  
# 获取前n行数据,返回元组:((2, 'Mr.Zhou', 'man', 38), (3, 'Mr.Ni', 'm', 37), (4, 'Mr.Chong', 'm', 40))
# row_2 = cursor.fetchmany(3)
# 获取所有数据,返回元组:((2, 'Mr.Zhou', 'man', 38), (3, 'Mr.Ni', 'm', 37), (4, 'Mr.Chong', 'm', 40))
# row_3 = cursor.fetchall()
  
conn.commit()
cursor.close()
conn.close()

2.try 和 fetchall

import pymysql
 
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \   # \ 的作用是编译器里代码太长另起一行,但下一行还和此行是一句.
       WHERE INCOME > %s" % (1000)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 获取所有记录列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
       # 打印结果
      print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income ))
except:
   print ("Error: unable to fetch data")
 
# 关闭数据库连接
db.close()

以上脚本执行结果如下:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

7.使用.format拼接数据库语句的坑

7.1 传统拼接,不会出错

cursor.execute("SELECT company_id FROM company_index_tables where company_name = %s",(name))

7.2 format拼接

使用format进行数据库语句拼接时,它会自动把我们值外面的引号去掉,因此导致插入失败。也就是说如果值是字符串,在拼接到数据库语句的过程中,因为引号被去掉,所以失败(当然也可以进行一定修改使其成功);但如果值是数字,那么拼接不会有丝毫影响。

数字拼接(此处start是数字):

sql="SELECT * FROM company_index_tables limit {0},10".format(start)
cursor.execute(sql)

字符串拼接(name是字符串),失败:

sql = "SELECT company_id FROM company_index_tables where company_name = {0}".format(name)
cursor.execute(sql)

想要成功,就自己手动加引号(成功):

sql = "SELECT company_id FROM company_index_tables where company_name = '{0}'".format(name)
cursor.execute(sql)
 类似资料: