PyMySQL介绍
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL安装
pip install pymysql
连接数据库
注意事项
在进行本文以下内容之前需要注意:
- 你有一个MySQL数据库,并且已经启动。
- 你有可以连接该数据库的用户名和密码
- 如果你是与远程数据库交互 ,还需要给权限 否则会报以下错误
Traceback (most recent call last): File "/home/pi/Mysqltest.py", line 4, in <module> conn = pymysql.connect(host="192.168.1.108", user="root",password="123456",database="pi-mysql",charset="utf8") File "/home/pi/.local/lib/python3.5/site-packages/pymysql/__init__.py", line 94, in Connect return Connection(*args, **kwargs) File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 325, in __init__ self.connect() File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 599, in connect self._request_authentication() File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 861, in _request_authentication auth_packet = self._read_packet() File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 684, in _read_packet packet.check_error() File "/home/pi/.local/lib/python3.5/site-packages/pymysql/protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "/home/pi/.local/lib/python3.5/site-packages/pymysql/err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'192.168.1.111' (using password: YES)")
因此你需要加上权限 进行如下操作:
点击数据库 用户 --->新建用户
然后输入用户名 root 再输入访问的ID(我这里是树莓派的ip地址) 插件 选 mysql-native-password 密码 123456
然后再点 用户 就可以看到 添加上了 再 点击 新添加用户 然后点击 权限管理员
然后是 点击 需要交互的数据库名 再点击添加权限 把权限给 新添加的用户 权限 全部勾上好了 然后保存
编辑
然后 重启一次 数据库 或者 涮新一下 就可以 远程与数据库之间交互了
基本使用
# 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor() # 定义要执行的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;"""# 执行SQL语句cursor.execute(sql) # 关闭光标对象cursor.close() # 关闭数据库连接conn.close()
增删改查操作
1.增
# 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor() sql="INSERT INTO USER1(name, age) VALUES (%s, %s);"username="LHL"age=22# 执行SQL语句cursor.execute(sql, [username, age]) # 提交事务(需要提交事物)conn.commit() cursor.close() conn.close()
如过没有效果 请 刷新一下 或 重启数据库。
1.1插入数据失败回滚
# 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor() sql="INSERT INTO USER1(name, age) VALUES (%s, %s);"username="LHL"age=22try: # 执行SQL语句cursor.execute(sql, [username, age]) # 提交事务conn.commit() # 提交之后,获取刚插入的数据的ID#last_id = cursor.lastrowidexceptExceptionase: # 有异常,回滚事务conn.rollback() cursor.close() conn.close()
2.删
# 导入pymysql模块importpymysql# 连接databaseconn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor() sql="DELETE FROM USER1 WHERE id=%s;"try: cursor.execute(sql, [4]) # 提交事务conn.commit() exceptExceptionase: # 有异常,回滚事务conn.rollback() cursor.close() conn.close()
如过没有效果 请 刷新一下 或 重启数据库。
3.改
# 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor() # 修改数据的SQL语句sql="UPDATE USER1 SET age=%s WHERE name=%s;"username="LHL"age=10try: # 执行SQL语句cursor.execute(sql, [age, username]) # 提交事务conn.commit() exceptExceptionase: # 有异常,回滚事务conn.rollback() cursor.close() conn.close()
如过没有效果 请 刷新一下 或 重启数据库。
4.查
# 导入pymysql模块importpymysql# 连接databaseconn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor() # 查询数据的SQL语句sql="SELECT id,name,age from USER1 WHERE id=1;"# 执行SQL语句cursor.execute(sql) # 获取单条查询数据res=cursor.fetchone() cursor.close() conn.close() # 打印下查询结果print(res)
如过没有效果 请 刷新一下 或 重启数据库。
5.批量执行
# 导入pymysql模块importpymysql# 连接databasepconn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor() sql="INSERT INTO USER1(name, age) VALUES (%s, %s);"data= [("LHL", 22), ("BOb", 20), ("xiaoming", 21)] try: # 批量执行多条插入SQL语句cursor.executemany(sql, data) # 提交事务conn.commit() exceptExceptionase: # 有异常,回滚事务conn.rollback() cursor.close() conn.close()
查询多条数据
如过没有效果 请 刷新一下 或 重启数据库。
# 导入pymysql模块 import pymysql # 连接 conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 查询数据的SQL语句 sql = "SELECT id,name,age from USER1;" # 执行SQL语句 cursor.execute(sql) # 获取多条查询数据 res = cursor.fetchall() cursor.close() conn.close() # 打印下查询结果 print(res)