经过上一篇的努力,环境终于准备好了,现在可以开始学习sql语句对数据库进行操作。
对数据库进行增删改之后,需要执行 cnn.commit()
查询数据库的内容后,可以用cursor.fetchall()和cursor.fetchone()获取查询结果,前者是获取所有结果,后者只获取一条。
简单操作如下:
import pymysql
cnn = pymysql.connect(host='localhost', port=3306, user='root', passwd='你自己设置的密码', database='sys', charset='utf8')
cursor = cnn.cursor()
#创建数据库edu
sql1 = "CREATE DATABASE edu"
#在数据库中插入表单student
sql2 = "CREATE TABLE `edu`.`student` (`SID` INT NOT NULL,`Sname` VARCHAR(45) NULL, `Sage` VARCHAR(45) NULL,`Ssex` VARCHAR(45) NULL,PRIMARY KEY (`SID`))"
#给数据表student插入第一行数据
sql3 = "INSERT INTO edu.student VALUES(01,'Tom','1990-01-01','M')"
try:
cursor.execute(sql3)
cnn.commit()
except Exception as e:
print("sql执行失败,回滚")
cnn.rollback()
cursor.execute("SELECT * FROM edu.student")
data = cursor.fetchall()
print(data)
cursor.close()
cnn.close()
这么辛苦的把数据库搞起来就是为了给其他模块使用,还是封装一下比较顺眼。以后就只需要写好sql语言,然后调用函数执行,不用再改来改去。
import pymysql
class mysqlConnect():
"""连接数据库,并进行操作"""
def __init__(self):
self.cnn = pymysql.connect(host='localhost', port=3306, user='root', passwd='你自己设置的密码', database='sys',
charset='utf8')
self.cursor = self.cnn.cursor()
def db_close(self):
self.cursor.close() # 关闭游标
self.cnn.close() # 关闭数据连接
def db_execute(self, sql):
"""执行sql语句并提交:包含增、删、改"""
try:
print('执行的sql语句为:', sql)
self.cursor.execute(sql)
self.cnn.commit()
except Exception as e:
self.cnn.rollback()
print('sql语句执行错误,进行回滚')
def db_select(self, sql):
"""执行查询sql语句,并返回所有查询结果"""
try:
self.cursor.execute(sql)
data = self.cursor.fetchall()
return data
except Exception as e:
print('查询失败')
改完以后看着顺眼多了,现在练习多写几个插入语句。坚持没有复制、粘贴,短短几行代码就出现2次缺少单引号导致运行错误后回滚,看来还是不够细心,需要多多练习。
用上面的函数执行sql操作代码如下:
if __name__ == '__main__': sql1 = "INSERT INTO edu.student VALUES('02','Jimmy','1990-1-19','M')" sql2 = "INSERT INTO edu.student VALUES('03','Lucy','1989-2-19','F')" sql3 = "INSERT INTO edu.student VALUES('04','Kate','1991-7-6','F')" sql4 = "INSERT INTO edu.student VALUES('05','Seven','1990-12-4','M')" sql99 = "Select * from edu.student" connect = mysqlConnect() connect.db_execute(sql4) data = connect.db_select(sql99) print("输出数据库结果") for iterm in data: print(iterm)
插入最后一行数据后,输出结果如下:
/Users/tracy/PycharmProjects/stu/venv/bin/python /Users/tracy/PycharmProjects/doubanApiTest/z_stu/stu_db/edu.py
执行的sql语句为: INSERT INTO edu.student VALUES('05','Seven','1990-12-4','M')
输出数据库结果
(1, 'zhaolei', '1990-01-01', 'M')
(2, 'Jimmy', '1990-1-19', 'M')
(3, 'Lucy', '1989-2-19', 'F')
(4, 'Kate', '1991-7-6', 'F')
(5, 'Seven', '1990-12-4', 'M')
Process finished with exit code 0
到这里就可以专心学习sql语言了,多多练习才能记录的牢。