首页 > 解决方案 > Db2 存储数据遇到错误 The numeric literal XXXX is not valid

问题描述

我正在解析Neighborhood 的Wikepedia1和Neighbourhood 的纬度和经度的Wikipedia2 并存储到 IBM Db2 中。我遇到了以下错误代码。请指教。

导入版本如下

ibm_db 3.0.2
requests 2.24.0
bs4 4.9.1
pandas 1.0.5

我能够解析到第 102 项,如下所示:

在此处输入图像描述

失败位置的 HTML:

在此处输入图像描述

错误代码

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-9-035d46749936> in <module>
     14         print(primary_key,";",neighbour['href'],";", neighbour['title'],";",lat, lng)
     15         insertQuery = f"insert into TORONTO values({primary_key},'{neighbour['title']}','{neighbour['href']}','{lat}','{lng}')"
---> 16         ibm_db.exec_immediate(conn,insertQuery)

Exception: [IBM][CLI Driver][DB2/LINUXX8664] SQL0103N  The numeric literal "27s_Bridge" is not valid.  SQLSTATE=42604 SQLCODE=-103

我的 Db2 表如下 create table TORONTO(id INTEGER PRIMARY KEY NOT NULL, neighbourhood VARCHAR(20), href VARCHAR(20), latitude VARCHAR(20), longitude VARCHAR(20) )

我的解析代码

primary_key = 0
for table in soup.find_all('table', class_ = 'multicol'):
    for neighbour in table.find_all('a', href=True, class_=False):
        url2 = 'https://en.wikipedia.org/' + neighbour['href']
        url_object = requests.get(url2)
        soup2 = BeautifulSoup(url_object.text, 'html.parser')
        count = 0
        primary_key += 1
        for coor in soup2.find_all('span', class_ = ['latitude','longitude']):
            if count == 2: continue
            if count == 0: lat = str(coor.string)
            if count == 1: lng = str(coor.string)
            count += 1
        print(primary_key,url2, neighbour['title'],lat, lng)
        insertQuery = f"insert into TORONTO values({primary_key},'{neighbour['title']}','{url2}','{lat}','{lng}')" 
        ibm_db.exec_immediate(conn,insertQuery)

标签: pythonsqldb2

解决方案


尝试将您的查询更改为:

insertQuery = f"insert into TORONTO values({primary_key},'{neighbour['title']}','{url2}','{lat}','{lng}')"

推荐阅读