为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决pymysql.err.ProgrammingError:1064-在mysql上保存数据?

如何解决pymysql.err.ProgrammingError:1064-在mysql上保存数据?

泛舟湖上清波郎朗 2021-05-02 16:57:52
我正在尝试将scrapy抓取的数据保存到mysql。但是,我有以下问题:不再支持MySQLdb。所以,我必须使用import pymysqlpymysql.install_as_MySQLdb()在settings.py文件在python 3%s上已弃用,我必须将.format与以下代码结合使用:def close(self, reason):        csv_file = max(glob.iglob('*.csv'), key=os.path.getctime)               mydb = MySQLdb.connect(host='localhost',                               user='demo',                               passwd='123456',                               db='testdb')        cursor = mydb.cursor()        csv_data = csv.reader(open(csv_file))        row_count = 0        for row in csv_data:            if row_count != 0:                cursor.execute("INSERT IGNORE INTO testtb(product, category) VALUES('{}','{}')".format(*row))            row_count += 1        mydb.commit()        cursor.close()我有以下错误<bound method AutorSpider.close of <AutorSpider 'autor' at 0x7f64725d29b0>>Traceback (most recent call last):  File "/home/pc/.local/lib/python3.6/site-packages/twisted/internet/defer.py", line 151, in maybeDeferred    result = f(*args, **kw)  File "/home/pc/.local/lib/python3.6/site-packages/pydispatch/robustapply.py", line 55, in robustApply    return receiver(*arguments, **named)  File "/home/pc/Escritorio/fpyautor/fpyautor/spiders/autor.py", line 109, in close    cursor.execute("INSERT IGNORE INTO autortb(frase, categoria) VALUES({},'{}')'".format(*row))  File "/home/pc/.local/lib/python3.6/site-packages/pymysql/cursors.py", line 170, in execute    result = self._query(query)  File "/home/pc/.local/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query    conn.query(q)  File "/home/pc/.local/lib/python3.6/site-packages/pymysql/connections.py", line 516, in query    self._affected_rows = self._read_query_result(unbuffered=unbuffered)还有其他更简单/有效的方法吗?因为即时通讯会在抓取任务结束时保存数据,并且如果我获得了更多结果(3000个项目),那么将来在更大的网站上可能会遇到问题吗?
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

转义字符串可以帮助您


def close(self, reason):

    csv_file = max(glob.iglob('*.csv'), key=os.path.getctime)       

    mydb = MySQLdb.connect(host='localhost',

                           user='demo',

                           passwd='123456',

                           db='testdb')

    cursor = mydb.cursor()


    csv_data = csv.reader(open(csv_file))


    row_count = 0

    for row in csv_data:

        if row_count != 0:

            product = mydb.escape_string(row[0])

            category = mydb.escape_string(row[1])

            #print category , product

            sql = 'INSERT IGNORE INTO testtb(product, category) VALUES ( "{}","{}")'.format(product,category)

            #print sql

            cursor.execute(sql)

            row_count += 1


    mydb.commit()

    cursor.close()


查看完整回答
反对 回复 2021-05-18
  • 1 回答
  • 0 关注
  • 744 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信