0
PythonでSQLiteにデータを挿入するにはいくつかの助けが必要です。pythonでSQLiteにデータを挿入するには
Iは、テーブルにデータを挿入するためのコードのこの部分を持って、sqlDataDict辞書の名前である:
cur.execute(''' INSERT INTO ProductAtt (imgID, productName, col1, col2, col3, col4, col5, col6,
col7, col8, col9, col10, col11, col12, col13, col14)
VALUES (:imgID, :productName, :col1, :col2, :col3, :col4,:col5, :col6, :col7, :col8, :col9,
:col10, :col11, :col12, :col13, :col14)''', sqlDataDict)
Iはまた、辞書がループした後、キーと値の同じ数を有していない辞書のセットを持ちます、
したら、次のようになります。例えば一度
{'imgID': '451841', 'productName': 'product1', 'col1': 'data1', 'col2': 'data2', 'col3': 'data3', 'col4': 'data4', 'col5': 'data5',
'col6': 'data6', 'col7': 'data7', 'col8': 'data8', 'col9': 'data9', 'col10': 'data10', 'col11': 'data11', 'col12': 'data12', 'col13': 'data13',
'col14': 'data14'}
を次のように:
{'imgID': '451841', 'productName': 'product1', 'col1': 'data1', 'col4': 'data4', 'col5': 'data5',
'col6': 'data6', 'col7': 'data7', 'col8': 'data8', 'col9': 'data9', 'col10': 'data10', 'col11': 'data11', 'col13': 'data13',
'col14': 'data14'}
辞書で私はいくつかのデータを持っていない場合は、私がマッサージを得た実際のdictが同じサイズと各ループの後に同じデータではない
を「あなたが結合するための値を指定しませんでした」。 dictに特定のデータがない場合、どうすれば渡すことができますか?
EDIT: 完全なコード:
import requests
from bs4 import BeautifulSoup
import sqlite3
###---> Connection to SQLite database
conn=sqlite3.connect('G:Folder/attributes.db')
cur=conn.cursor()
###---> DROP existing tables in databese
cur.execute('DROP TABLE IF EXISTS ProductAtt')
###--->Creating tabel's in databese
cur.execute('''CREATE TABLE ProductAtt (imgID INTEGER PRIMARY KEY, productName TEXT,
Col1 REAL, Col2 REAL, Col3 TEXT, Col4 TEXT, Col5 TEXT, Col6 REAL,
Col7 TEXT, Col8 TEXT, Col9 TEXT, Col10 TEXT, Col11 TEXT,
Col12 TEXT, Col13 TEXT, Col14 TEXT, Col15 TEXT)''')
input_file=('G:Folder/urls.txt')
###---> Loop linkova iz file-a
with open(input_file) as line:
url=line.readlines()
#print(url) #---> TEST print line
###---> BeautifulSoup for each URL from *.txt file
for singleUrl in url:
r=requests.get(singleUrl)
soup=BeautifulSoup(r.content, "lxml")
#print (soup) #---> TEST print line
#==============================================================================
# Retrieves image name [imgName] and product name [productName]
#==============================================================================
get_dataImg = soup.find_all("div", {"class": "product-image"})
###---> Image name
for imgNameJpg in get_dataImg:
imgNameJpg = imgNameJpg.a['href'].split('/')[-1]
imgName = imgNameJpg.split('.')[0]
#print("imageID:", imgName) #---> TEST print line
###--->Product name
get_dataName =soup.find_all("span", {"class": "product-name"})
for productName in get_dataName:
productName = productName.text
print("productName:", productName) #---> TEST print line
###--->Dictionary imageID and productName
nameData = {"imgID": imgName, "productName": productName}
#print(nameData) #---> TEST print line
#==============================================================================
# Product attributes [productAttributes] i [productValues]
#==============================================================================
get_attributeName = soup.find(True, {"class": ["product-attributes", "product-attribute-value"]}).find_all('li')
###---> Dictionary
allDataDict = {}
for attData, attValues in get_attributeName:
attData=attData.split(':')[0]
attData=attData.split(' ')[0]
#print(attData) #---> TEST print line
data = {attData: attValues.text}
allDataDict.update(data)
#print(allDataDict) #---> TEST print line
#==============================================================================
# New Dictionary, two in one, nameData and allDataDict INTO sqlDataDict
#==============================================================================
sqlDataDict = dict(list(nameData.items()) + list(allDataDict.items()))
#print(values) #---> TEST print line
#==============================================================================
# INTO SQLite
#==============================================================================
columns = ','.join(sqlDataDict.keys())
placeholders= ','.join('?' * len(sqlDataDict))
sql = 'INSERT INTO ProductAtt ({}) VALUES ({})'.format(columns, placeholders)
cur.execute(sql, sqlDataDict.values())
conn.commit()
あなたが示唆したように、私はちょうどあなたのコードを使用: '列を=」、sql = 'INSERT INTO ProductAtt({})VALUES({})'。書式(列、行、列)プレースホルダ) cur.execute (SQL、sqlDataDict.values()) ' しかし、結果は次のとおりです。 **とValueError:パラメータは**サポートされていないタイプのものであり で' cur.execute(SQL、sqlDataDict.values()) ' は、私は欠場しました何か? – CortoMaltese
コード全体を送信できますか? – harshil9968
もちろん、私は自分の質問を編集してそこにコードを入れました。 – CortoMaltese