python之连接mysql数据库

使用python连接mysql数据库需要使用pymysql库。
没有安装的话在终端输入:pip install pymysql命令进行安装。
当然,连接数据库时一些连接信息需要有:数据库ip、端口、登录用户名、密码、数据库名字、字符集类型。
下面是连接数据后执行的一些基本操作。

首先需要创建表

import pymysql
connect=pymysql.connect(
    host="192.168.0.170",
    port=3306,
    user="mysql",
    password="123456",
    database="study",
    charset="utf8"
)
#连接mysql需要的信息有:ip,用户名,密码,数据库名字,端口号,字符集类型
cursor1=connect.cursor()		#得到一个光标对象,确定sql再哪个位置执行
#默认是返回元组类型的数据,我喜欢用返回字典类型的,如下cursor2
cursor2=connect.cursor(cursor=pymysql.cursors.DictCursor)		#注意DictCursor,DC必须大写
ct_sql='''
create table domain(
id int auto_increment PRIMARY KEY,
name VARCHAR (10) not NULL UNIQUE ,
age INT NOT NULL,
user VARCHAR (10) NOT NULL ,
password INT NOT NULL 
)ENGINE=innodb DEFAULT charset=utf8;		
'''
cursor2.execute(sql)			#执行sql
result1=cursor2.fetchall()		#取所有返回值
#result2=cursor2.fetchone()		#取第一行数据作为返回值
#result3=cursor2.fetchmany(2)	#取前两行数据作为返回值
print(result1)				#打印出结果
cursor2.close()				#关闭光标
connect.close()				#断开连接
  • 这里创建了domain表,有一些参数,方便接下来进行增删改查的操作。

insert into插入信息

import pymysql
connect=pymysql.connect(
    host="192.168.0.170",
    port=3306,
    user="mysql",
    password="123456",
    database="study",
    charset="utf8"
)
cursor=connect.cursor(cursor=pymysql.cursors.DictCursor)
sql="insert into domain (name,age,USER,password) VALUES ('耿恩',25,'gengen','123456');"
sql2="select * from domain;"
try:
    cursor.execute(sql)
    connect.commit()		#涉及写的操作要进行提交,commit 一下
    cursor.execute(sql2)
    result=cursor.fetchall()

    print(result[-1])
except Exception as e:
    print(str(e))
    
finally:
    cursor.close()
    connect.close()
  • 这里需要注意的是进行插入操作时要记得commit提交

获取最后插入数据的id&插入数据失败时回滚

import pymysql
connect=pymysql.connect(
    host="192.168.0.170",
    port=3306,
    user="mysql",
    password="123456",
    database="study",
    charset="utf8"
)
cursor=connect.cursor(cursor=pymysql.cursors.DictCursor)
sql=sql="insert into domain (name,age,USER,password) VALUES ('耿恩',25,'gengen','123456');"
try:
    cursor.execute(sql)
    connect.commit()
    last_id=cursor.lastrowid		#获取最后插入数据的id
    print(last_id)
except Exception as e:
    print(str(e))
    connect.rollback()				#失败时回滚

finally:
    cursor.close()
    connect.close()
  • 这里获取最后一次插入数据的id,数据关联时会用到

批量插入信息

以下省略连接数据库的步骤
cursor=connect.cursor(cursor=pymysql.cursors.DictCursor)
sql = "INSERT INTO person(name, age) VALUES (%s, %s);"
data = [("aaa",111), ("bbb",222), ("ccc",333)]
try:
    # 批量执行多条插入SQL语句
    cursor.executemany(sql, data)
    # 提交事务
    conn.commit()

except Exception as e:
    # 有异常,回滚事务
    conn.rollback()
cursor.close()
conn.close()
  • 这里需要注意的是 cursor.executemany() 的使用,如果仍使用**execute** ,会提示:
not all arguments converted during string formatting

删除数据

sql='delete from domain where name=%s;'

cursor.execute(sql,[name])
name='耿恩'
  • 学习%s的使用。

查询,做自动化数据对比的时候经常用到

sql="select * from course WHERE teacher_no=%s;"

cursor.execute(sql,[no])
results=cursor.fetchall()
for i in range(0,len(results)):
    result=results[i]

    print(result)

目前以下用法没使用过,当获取的表格数据中如果数据量非常大,我一般写sql语句进行删选,这里也记录一下,有些场景使用还是很方便的。后续在实战中遇到问题再进行补充记录。
以上信息参考虫洞小鳗鱼的博客进行学习的!

可以获取指定数量的数据
 cursor.fetchmany(3)
 光标按绝对位置移动1
 cursor.scroll(1, mode=“absolute”)
 光标按照相对位置(当前位置)移动1
 cursor.scroll(1, mode=“relative”)