python使用数据库时,关闭游标报错,如何解决?

img

源码如下:
from selenium.webdriver import Chrome, ChromeOptions

import pymysql

class SQL:

def __init__(self):
    self.host = 'localhost'
    self.username = 'root'
    self.password = '199904300073'
    self.database = 'lvyouxitong'
    self.conn = None
    self.cursor = None

def connect(self):
    self.conn = pymysql.connect(host=self.host, port=3306,user=self.username, password=self.password, database=self.database)

def execute(self, str):
    if self.conn is None:
        self.connect()
    self.cursor = self.conn.cursor()
    self.cursor.execute(str)
    self.conn.commit()

def query(self, str):
    if self.conn is None:
        self.connect()
    self.cursor = self.conn.cursor()
    self.cursor.execute(str)
    return self.cursor.fetchall()

def close(self):
    self.cursor.close()
    self.conn.close()

option = ChromeOptions()
option.add_argument('--headless')
option.add_argument('--no-sandbox')
url = 'https://new.qq.com/ch/visit/'
browser = Chrome(options=option)
browser.get(url=url)
sql = SQL()
browser_list = browser.find_elements_by_xpath('//*[@id="dataFull"]/li/h3/a')
for i in browser_list:
title = i.text
url = i.get_attribute('href')
sql.execute('insert into hot_news values(0, "%s", "%s");' % (title, url))
print('%s -插入成功' % title)
sql.close()

img


你这里赋值是有点问题的,赋值不会成功的
解决参考:
1.SQL.cursor = self.conn.cursor(),上面的self.conm同理,不要self.conn赋值,用类名放前面
2.把初始化那里,设置一个全局变量,self.g = gloables(),赋值的时候用self.g["conn"]=赋值,中括号里面就是你的变量名,下次要用就整个self.g["conn"]带过去用