不知道发生了什么:" pymysql.err.ProgrammingError:(1064 ......"

时间:2016-10-11 15:40:48

标签: python mysql

这是我的代码:

from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
import re
import pymysql

resp = urlopen("https://en.wikipedia.org/wiki/Main_Page").read().decode("utf-8")

soup = bs(resp ,"html.parser")

listUrls = soup.findAll("a", href=re.compile("^/wiki/"))

for url in listUrls:

        if not re.search('\.(jpg|JPG)$', url['href']):

            conn = pymysql.connect(
                            host='127.0.0.1',
                            user='root',
                            password='',
                            db='wikiurl',
                            charset='utf8mb4'
                           )
            try:
                with conn.cursor() as cursor:

                     sql = "insert into 'wikiurl'('urlname','urlhref') VALUES (%s , %s)"
                     cursor.execute(sql,(url.get_text(), "https://en.wikipedia.org" + url["href"]))
                     conn.commit()

            finally: 
                     conn.close()

错误:

  

pymysql.err.ProgrammingError:(1064,"您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在''附近使用。 wikiurl'(' urlname',' urlhref')VALUES(' Wikipedia',' https://en.wikipedia.org/w'在第1行& #34)

2 个答案:

答案 0 :(得分:2)

我认为你的sql语法有一些错误,但调试它并不容易。

我建议您使用此方法打印上面发送到mysql server.pymysql手册的真正的sql字符串:

mogrify(self, query, args=None)

'''通过调用返回发送到数据库的确切字符串 execute()方法。 此方法遵循扩展到DB API 2.0,然后是Psycopg。''' 例如:

你可以使用

print cursor.mogrify(sql,(url.get_text(), "https://en.wikipedia.org" + url["href"]))

祝你好运!

答案 1 :(得分:1)

首先,我建议让空白最重视细节。

试试这个:

sql = "INSERT INTO wikiurl (urlname, urlhref) VALUES (%s, %s)"

另请注意,表名称周围不需要单引号。请参阅:MySQL Insert documentation.

编辑:您不需要在列名称周围加上引号。