使用 pip 安装
pip install pymysql
使用 Pycharm 界面安装
# 1.导入库
import pymysql
# 2.建立连接
conn = pymysql.connect(host='服务器地址',
user='用户名',
password='密码',
database='数据库名',
charset="utf8mb4")
# 3.关闭连接
conn.close()
由于mysql的连接操作使用比较频繁,所以可以封装成一个数据库连接函数,并放置在__init__.py中。
#__init__.py
import pymysql
# 1.封装建立连接的对象
def get_conn():
conn = pymysql.connect(
host="服务器地址",
user="root",
password="123456",
database="数据库名",
charset="utf8mb4"
)
return conn
from st_pymysql import get_conn
def demo():
# 1.获取连接对象
conn = get_conn()
# 2.获取游标对象
cursor = conn.cursor()
# 3.执行SQL
cursor.execute("SELECT VERSION()")
# 4.查询结果
version = cursor.fetchone()
print(f"数据库的版本是:{version}")
# 5.关闭连接
conn.close()
if __name__ == '__main__':
demo()
实际操作时,使用ip地址访问数据库报错:host ‘‘ is not allowed to connect to this mysql server
解决办法:在终端中按照以下步骤输入命令:
mysql -u root -p;
说明:根据自己的用户名来输入正确的用户,此处我的用户是root
use mysql;
select t.host from user t where t.user=‘root’;
查看mysql.user 中 root用户的host是什么,可以不用执行。
update user set host = ‘%’ where user = ‘root’;
FLUSH PRIVILEGES;
说明:是修改在不重启mysql服务的情况下立即生效。
创建表 testcase
from st_pymysql import get_conn
def createtable_demo():
conn = get_conn() # 获取连接
cursor = conn.cursor() # 获取游标
sql = """
CREATE TABLE `testcase` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) COLLATE utf8_bin NOT NULL,
`expect` varchar(255) COLLATE utf8_bin NOT NULL,
`owner` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
"""
cursor.execute(sql) # 执行SQL
conn.close() # 关闭连接
if __name__ == '__main__':
createtable_demo()
from st_pymysql import get_conn
def insert_demo():
conn = get_conn() # 获取连接
cursor = conn.cursor() # 获取游标
sql = """INSERT INTO testcase
(id, title, expect, owner)
values (1, 'S11总决赛', '冠军', 'EDG');
"""
cursor.execute(sql) # 执行SQL
conn.commit() # 提交
if __name__ == '__main__':
insert_demo()
查询操作:
fetchone()
:获取单条记录fetchmany(n)
:获取 n 条记录fetchall()
:获取所有结果记录import sys
from st_pymysql import get_conn
def demo():
conn = get_conn() # 获取连接
cursor = conn.cursor() # 获取游标
sql = "SELECT * FROM testcase;"
# 捕获异常
try:
cursor.execute(sql) # 执行SQL
record = cursor.fetchone() # 查询记录
print(record)
except Exception as e:
print(sys.exc_info()) # 打印错误信息
finally:
conn.close() # 关闭连接
if __name__ == '__main__':
demo()
"""
执行结果:
(1, 'S11总决赛', '冠军', 'EDG')
"""
提交:commit
向数据库发出信号,完成变更,并且在操作后不再进行其他更改。
回滚:rollback
对一个或者多个的变更不满意,可以使用回滚还原回去。
try-catch-finally
from st_pymysql import get_conn
def demo():
conn = get_conn() # 获取连接
cursor = conn.cursor() # 获取游标
sql = """INSERT INTO testcase
(id, title, expect, owner)
values (2, 'S11全球总决赛', '冠军', 'EDG');
"""
try:
cursor.execute(sql) # 执行SQL
conn.commit() # 提交事务
except:
conn.rollback() # 回滚事务
finally:
conn.close() # 关闭连接
if __name__ == '__main__':
demo()
更新数据表的数据
from st_pymysql import get_conn
def demo():
conn = get_conn()
cursor = conn.cursor()
sql = "UPDATE testcase SET owner='hogwarts' WHERE id=2;"
try:
cursor.execute(sql) # 执行SQL
conn.commit() # 提交事务
except:
conn.rollback() # 回滚事务
finally:
conn.close() # 关闭连接
if __name__ == '__main__':
demo()
删除数据表的数据
from st_pymysql import get_conn
def demo():
conn = get_conn() # 获取连接
cursor = conn.cursor() # 获取游标
sql = "DELETE FROM testcase WHERE id=3;"
try:
cursor.execute(sql) # 执行SQL
conn.commit() # 提交事务
except:
conn.rollback() # 回滚事务
finally:
conn.close() # 关闭连接
if __name__ == '__main__':
demo()