Python数据库连接以及游标关闭问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据库连接以及游标关闭问题相关的知识,希望对你有一定的参考价值。

各位大神:
小弟初学Python,写了几行代码,连接一个数据库,执行完SQL后关闭游标及数据库,然后用print输出数据库连接和游标,显示如下:
<pymysql.cursors.Cursor object at 0x0000002F8626A128>
<pymysql.connections.Connection object at 0x0000002F8434CAC8>
这意味着数据库连接和游标没有关闭吧?
怎么解决?
部分自定义函数如下:
。。。。

def mysql_close_cursor(cursor):
cursor.close()
def mysql_close_con(con):
con.close()
。。。。
部分程序代码(调用自定义函数)如下:
.。。。。

sql=mysql_get_sql()
results=mysql_set_sql(con,cursor,sql)
mysql_print_results(results)
mysql_close_cursor(cursor)
mysql_close_con(con)

print(cursor)
print(con)
。。。。。
求大神帮忙看看!
谢谢!

参考技术A MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:
host:MySQL服务器名
user:数据库使用者
password:用户登录密码
db:操作的数据库名
charset:使用的字符集(一般是gb2312)
cursor = db.cursor() 其实就是用来获得python执行Mysql命令的方法,也就是
我们所说的操作游标
下面cursor.execute则是真正执行MySQL语句,即查询TABLE_PARAMS表的数据。
至于fetchall()则是接收全部的返回结果行 row就是在python中定义的一个变量,用来接收返回结果行的每行数据。同样后面的r也是一个变量,用来接收row中的每个字符,如果写成C的形式就更好理解了
for(string row = ''; row<= cursor.fetchall(): row++)
for(char r = ''; r<= row; r++)
printf("%c", r);追问

我用的是第三方库pymysql。你讲的不错很详细,但不是我想要问的。Python连接MySQL数据库并执行sql语句我到会。我想问的是出现那种结果的情况下,游标和数据库链接到底关闭了么,如果没有怎么解决。

Python学习第五篇:操作MySQL数据库

Python学习第五篇:操作MySQL数据库

活动地址:CSDN21天学习挑战赛

python 操作MySQL数据库,要先安装第三方库pymysql

命令行 pip install pymysql

pycharm 里的setting 设置里添加库

——

操作数据库基本流程

  • 与数据库创建连接
  • 获取游标
  • 通过游标执行sql语句
  • 关闭游标
  • 关闭数据库连接

创建连接对象

conn = pymysql.connect(host='localhost',port=3306,user='root',password='root',database='stu')

pymysql.connect() 的可用参数:
host:mysql 的地址,本地为 localhost 或127.0.0.1
port:连接mysql 的端口,默认3306
database:数据库名称
user:连接用户名
password:连接的密码
charset: 通信采用的编码方式,推荐使用utf8
——

获取游标对象

要执行数据库的增删改查语句需要通过游标对象

cur = conn.cursor()

cursor() 的参数说明:
execute( operation [parameters]):使用游标执行SQL语句,返回受影响的行数,主要用于执行insert、update、delete、select等语句,也可以执行create、alter、drop等语句
cur.fetchone(): 获取查询结果集中的一条数据,返回一个元组,如(1,张三)
cur.fetchall(): 获取查询结果集中的所有数据,返回一个元组,如((1,张三),(2,'李四"))
cur.close(): 关闭游标,表示和数据库操作完成

——

操作数据库测试:

import pymysql

conn = pymysql.connect(host='localhost',port=3306,user='root',password='root',database='stu')
cursor = conn.cursor()
cursor.execute("select * from student;")
row = cursor.fetchone()
print(row)
cursor.close()
conn.close()

得到sql 语句 "select * from student;" 的执行结果为 ('201215121', '李勇', '男', 18, '计算机系')
即查 student 表中的所有数据。
这里是用了 cur.fetchone() , 只能获取查询结果集中的一条数据

要获取多条数据, 用fetchall(),获取查询结果集中的所有数据

import pymysql

conn = pymysql.connect(host='localhost',port=3306,user='root',password='root',database='stu')
cursor = conn.cursor()
cursor.execute("select * from student;")
row = cursor.fetchall()
print(row)
cursor.close()
conn.close()

得到查询结果:(('201215121', '李勇', '男', 18, '计算机系'), ('201215122', '刘晨', '女', 19, '计算机系'))
是一个元组,元组里有两个元组

——
所以用python存在数据库,根据这个模板即可,只需在 execute() 中填写想要执行的sql语句,对数据库进行增删改查等操作。

import pymysql

conn = pymysql.connect(host='localhost',port=3306,user='root',password='root',database='stu')
cursor = conn.cursor()
cursor.execute("sql语句")
row = cursor.fetchall()
print(row)
cursor.close()
conn.close()

以上是关于Python数据库连接以及游标关闭问题的主要内容,如果未能解决你的问题,请参考以下文章

python中脚本怎么执行sql语句?

python3 连接mysql

MySQL与python交互

用python代码简单连接MySQL以及插入数据的两种方法

Python学习第五篇:操作MySQL数据库

Python学习第五篇:操作MySQL数据库