2017-11-25 77 views
0

即时尝试将数据放到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() 
+1

你使用'不同的是:pass'所以你不能看到错误消息 - 这就是为什么'除了:pass'是例外最坏的解决方案。您应该至少显示错误'除了例外如e:print(e)'(PL:nieużywaj'except:pass') – furas

+0

现在我可以看到语法错误\t cur.executemany(“INSERT INTO t(?)VALUES ?)“,(str(put),x2)) –

+0

as @creativecoding说 - 'print'仅用于在屏幕上发送文本。它什么都不返回。所以你需要'put =“var”+ str(xx)' – furas

回答

0

print函数的返回值是NoneNone被分配给变量put。你可能想改变这一行:

put = print("var"+str(xx)) 
0

我提出自己的版本

因为有列的数目可变(和“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() 
相关问题