数据库的操作

本文详细介绍了使用Navicat手动操作数据库和pymysql进行Python连接MySQL的步骤,包括执行SQL语句、获取数据、封装操作及注意事项。同时,展示了如何避免一次性取太多数据导致的性能问题和游标的正确管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据库的操作

1.1手工操作数据库

我这里用的是Navicat来进行手工连接数据库的,只要是可以连接数据库的软件都可以

连接成功后,可以打开对应的数据库下的表查看数据

1.2pymysql操作数据库

pymysql是第三方库,所以需要安装pip install pymysql

安装后导入pymysql包就可以使用了,import pymysql

数据库的操作步骤:

  1. 建立连接(认识小姐姐/小哥哥,加个微信)
  2. 得到一个游标的对象(数据库操作都是通过游标)(和小姐姐/小哥哥约会,见面的机会)
  3. execute(sql)执行sql语句(看电影)
  4. 获取执行sql语句的结果(反馈结果)
  5. 关闭游标对象(再见)
  6. 关闭连接(微信晚安)
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()提交,更新数据库状态,相当于多个人同时操作数据库时,你如果不更新拿到的数据不是最新的

一定要进行游标关闭,连接关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值