python操作数据库之cursor对象

import MySQLdb

conn = MySQLdb.connect(host=‘localhost’, user=‘root’, passwd='123456, db=‘dbname’, charset=‘utf8’)

cursor = conn.cursor()

cursor.execute(sql)

成功result为1;失败为0。

此时,cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def iter())和生成器(yield)的MySQLdb对象,这个时候cursor中还没有数据,只有等到fetchone()或fetchall()的时候才返回一个元组tuple(我个人认为是fetchall()同时生成器转型为tuple了,可以看下面的代码对比),才支持len()和index()操作,这也是它是迭代器的原因。但同时为什么说它是生成器呢?因为cursor只能用一次,即每用完一次之后记录其位置,等到下次再取的时候是从游标处再取而不是从头再来,而且fetch完所有的数据之后,这个cursor将不再有使用价值了,即不再能fetch到数据了。

import pymysql

# 创建连接对象
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='123456',
    database='world',
    charset='utf8')

# 获取游标对象
cursor = conn.cursor()  # Cursor类的对象

# 查询 SQL 语句
sql = "select * from scores;"
# 执行 SQL 语句 返回值就是 SQL 语句在执行过程中影响的行数
row_count = cursor.execute(sql)
print("SQL 语句执行影响的行数%d" % row_count)

#     """cursor.fetchall()的数据类型为tuple,很可疑"""
print(cursor.fetchall())

print(cursor.fetchall())

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

结果为:

SQL 语句执行影响的行数6
((3.5, 1), (3.65, 2), (4.0, 3), (3.85, 4), (4.0, 5), (3.65, 6))
()

下面手动用代码演示下:

a = (i for i  in range(10))
print(tuple(a))
print(tuple(a))
#结果为:
#a = (i for i  in range(10))
#print(tuple(a))
#print(tuple(a))

或者

a = iter([1,2,3,4,5])
print(tuple(a))
print(tuple(a))
#结果为:
#(1, 2, 3, 4, 5)
#()

另一个发现,看下图代码:

a = (i for i  in range(10))
# print(tuple(a))
while True:
    print(next(a))

结果为:

Traceback (most recent call last):
0
1
  File "C:/Users/Administrator/PycharmProjects/untitled5/连接数据库.py", line 37, in <module>
2
    print(next(a))
3
StopIteration
4
5
6
7
8
9

很显然,虽然结果报错,但是在预料之内,只是因为可迭代元素的结果生产完了而已。再来看一下下一个相似又有意思的代码

a = (i for i  in range(10))
print(tuple(a))
while True:
    print(next(a))

结果为:

Traceback (most recent call last):
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  File "C:/Users/Administrator/PycharmProjects/untitled5/连接数据库.py", line 37, in <module>
    print(next(a))
StopIteration

只加了一行代码,但是从报错的结果来看,收获颇丰。首先,转型后,肯定对迭代器中的元素进行了遍历,然后通过某种操作,进行转型。我们基本已经可以确定了,强制转型后,肯定对迭代器中的元素进行了遍历,而且可用元素已经被耗尽了。所以,代码在while循环中,直接就报StopIteration了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Python 操作 MySQL 数据库的案例: 1. 首先需要安装 MySQLdb 包,可以使用 pip install mysqlclient 命令进行安装。 2. 连接数据库。通过以下代码可以连接到一个 MySQL 数据库: ```python import MySQLdb # 打开数据库连接 db = MySQLdb.connect(host="localhost", user="username", passwd="password", db="database_name") ``` 其中,host 表示数据库的主机名,user 表示用户名,passwd 表示密码,db 表示要连接的数据库名。 3. 创建游标。使用 MySQLdb 的 cursor() 方法创建一个游标对象,可以使用游标对象执行 SQL 语句。 ```python # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() ``` 4. 执行 SQL 语句。可以使用 execute() 方法执行 SQL 语句,例如: ```python # 使用 execute() 方法执行 SQL 查询 cursor.execute("SELECT * FROM table_name") ``` 5. 获取查询结果。可以使用 fetchall() 方法获取查询结果,例如: ```python # 使用 fetchall() 方法获取所有查询结果 results = cursor.fetchall() # 遍历结果 for row in results: col1 = row[0] col2 = row[1] # 其他列以此类推 ``` 6. 插入数据。可以使用 execute() 方法执行 SQL 插入语句,例如: ```python # 使用 execute() 方法执行 SQL 插入语句 sql = "INSERT INTO table_name (col1, col2) VALUES (%s, %s)" val = ("value1", "value2") cursor.execute(sql, val) # 提交插入操作 db.commit() ``` 7. 关闭数据库连接。使用 close() 方法关闭数据库连接。 ```python # 关闭数据库连接 db.close() ``` 以上就是一个简单的 Python 操作 MySQL 数据库的案例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值