1.数据库的操作
1.1手工操作数据库
我这里用的是Navicat来进行手工连接数据库的,只要是可以连接数据库的软件都可以
连接成功后,可以打开对应的数据库下的表查看数据
1.2pymysql操作数据库
pymysql是第三方库,所以需要安装pip install pymysql
安装后导入pymysql包就可以使用了,import pymysql
数据库的操作步骤:
- 建立连接(认识小姐姐/小哥哥,加个微信)
- 得到一个游标的对象(数据库操作都是通过游标)(和小姐姐/小哥哥约会,见面的机会)
- execute(sql)执行sql语句(看电影)
- 获取执行sql语句的结果(反馈结果)
- 关闭游标对象(再见)
- 关闭连接(微信晚安)
import pymysql
# 建立连接
host = 'api.lemonban.com'
port = 3306
username = 'future'
password = '123456'
db_name = 'futureloan'
# 得到连接对象
connection = pymysql.connect(host=host,
port=port,
user=username,
password=password,
database=db_name)
# 获取游标对象,就相当于读取数据库内容时的光标
cursor = connection.cursor()
print(cursor)
# 执行sql语句(最好是不要一次取太多条数据,不然会很慢)
sql = 'select * from member limit 5;'
cursor.execute(sql)
# 获取结果
# 得到sql语句查询的一条数据
data1 = cursor.fetchone()
print(data1)
# 得到sql语句查询的多条数据
data = cursor.fetchall()
print(data)
运行结果:
查询一条数据和查询多条数据代码位置互换,得到的结果
因为先得到了5条数据,光标已经在第5条数据后面了,sql语句只查询了5条数据,因此再查询一条数据时显示None
注意:尽量避免使用一个游标进行多次操作
修改后的代码如下:
import pymysql
# 建立连接
host = 'api.lemonban.com'
port = 3306
username = 'future'
password = '123456'
db_name = 'futureloan'
# 得到连接对象
connection = pymysql.connect(host=host,
port=port,
user=username,
password=password,
database=db_name)
# 获取游标对象,就相当于读取数据库内容时的光标
cursor = connection.cursor()
print(cursor)
# 执行sql语句(最好是不要一次取太多条数据,不然会很慢)
sql = 'select * from member limit 5;'
cursor.execute(sql)
# 获取结果
# 得到sql语句查询的多条数据
data = cursor.fetchall()
print(data)
# 获取第二个游标并执行sql语句,得到查询结果
cursor2 = connection.cursor()
sql = 'select * from member limit 5;'
cursor2.execute(sql)
# 得到sql语句查询的一条数据
data1 = cursor2.fetchone()
print(data1)
# 关闭游标
cursor.close()
cursor2.close()
# 关闭连接
connection.close()
运行结果
注意:通常不会同时使用两个游标的
2.数据库操作的封装
import pymysql
class DBhandler():
def __init__(self, host='api.lemonban.com',
port=3306,
username='future',
password='123456',
db_name='futureloan'):
# 得到一个连接对象
# 注意connection是类属性,前面一定要加self
self.connection = pymysql.connect(host=host,
port=port,
user=username,
password=password,
database=db_name)
def qurey_one(self, sql):
# 查询一条数据
# 得到游标
cursor = self.connection.cursor()
# 提交(更新数据库状态)
self.connection.commit()
# 执行sql语句
cursor.execute(sql)
# 得到查询结果
data = cursor.fetchone()
# 关闭游标
cursor.close()
return data
def qurey_all(self, sql):
# 查询多条记录
cursor = self.connection.cursor()
self.connection.commit()
cursor.execute(sql)
data = cursor.fetchall()
cursor.close()
return data
def close(self):
self.connection.close()
# 简单的测试代码(只有右击运行时才会运行,其他模块导入时,不会执行此代码)
if __name__ == '__main__':
db = DBhandler()
res = db.qurey_one('select * from member limit 5;')
print(res)
# 一定要关闭连接
db.close()
运行结果:
注意:
commit()提交,更新数据库状态,相当于多个人同时操作数据库时,你如果不更新拿到的数据不是最新的
一定要进行游标关闭,连接关闭