我无法将数据保存到循环中的sql-python
问题描述:
即时尝试将数据放到sql表中,但始终存在空白文件。 当我评论插入,并在屏幕上打印数据,然后我看到的一切。 任何人都可以帮助我吗?我无法将数据保存到循环中的sql-python
import csv, sqlite3
#filename = "data_.csv"
#f = open(filename, "w")
qlite_file = 'my_first_db.sqlite.db'
con = sqlite3.connect("tedsddwwsssat.db")
cur = con.cursor()
cur.execute("CREATE TABLE t (var0, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15);")
for a in range(1,10):
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = 'https://www.auto-data.net/en/?f=showCar&car_id='+ str(a)
try:
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close();
page_soup = soup(page_html,"html.parser")
container = page_soup.findAll("table", {"class":"carData rightT"})
x = container[0].findAll("tr")
xxx = len(x)
print(xxx)
#if xxx>15:
# xxx=15
if x[0].findAll("td")[1].text in ("Nissan ","volkswagen ","AC ", "BMW ", "Citroen ", "Seat ", "Toyota ", "Tesla", "Volvo ", "Jeep ", "Kia ", "Renault", "Fiat ", "Ford ", "Mercedes-Benz "):
for xx in range(10):
x1 = x[xx].findAll("td")[0].text
x2 = x[xx].findAll("td")[1].text
put = print("var"+str(xx))
print(x2)
#cur.executemany("INSERT INTO t (?) VALUES (?)", (put, x2))
con.commit()
#f.write(x1 + ": " + x2 + ",")
f.write("\n")
except:
pass
#print("done " + str(a))
con.close()
答
的print
函数的返回值是None
。 None
被分配给变量put
。你可能想改变这一行:
put = print("var"+str(xx))
答
我提出自己的版本
因为有列的数目可变(和“VARx前提”)
所以SQL查询需要不同数量的?
- 即。 (?,?,?)
为三列
from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
import sqlite3
con = sqlite3.connect("tedsddwwsssat.db")
cur = con.cursor()
cur.execute("CREATE TABLE t (var0, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, var14, var15);")
for car_id in range(1, 10):
my_url = 'https://www.auto-data.net/en/?f=showCar&car_id=' + str(car_id)
try:
page_html = urlopen(my_url).read()
page_soup = soup(page_html, "html.parser")
container = page_soup.findAll("table", {"class":"carData rightT"})
all_trs = container[0].findAll("tr")
first_td = all_trs[0].findAll("td")[1]
if first_td.text in ("Nissan ", "volkswagen ", "AC ", "BMW ", "Citroen ", "Seat ", "Toyota ", "Tesla", "Volvo ", "Jeep ", "Kia ", "Renault", "Fiat ", "Ford ", "Mercedes-Benz "):
# first get all values and column names
columns = []
values = []
for x in range(10):
columns.append("var" + str(x))
values.append(all_trs[x].findAll("td")[1].text)
print(columns)
print(values)
# there is variable number of columns
# so you have to create string with variable number of `?'
qmarks = ','.join(['?']*len(columns))
columns = ','.join(columns)
# put all columns in one row using one INSERT
query = "INSERT INTO t ({}) VALUES ({})".format(columns, qmarks)
cur.execute(query, values)
con.commit()
except Exception as e:
print(e)
con.close()
你使用'不同的是:pass'所以你不能看到错误消息 - 这就是为什么'除了:pass'是例外最坏的解决方案。您应该至少显示错误'除了例外如e:print(e)'(PL:nieużywaj'except:pass') – furas
现在我可以看到语法错误\t cur.executemany(“INSERT INTO t(?)VALUES ?)“,(str(put),x2)) –
as @creativecoding说 - 'print'仅用于在屏幕上发送文本。它什么都不返回。所以你需要'put =“var”+ str(xx)' – furas