-1

XMLfileをmysqldbに解析しようとしています。ここにxmlがあります

<categories>
<category id="28">Woman</category>
<category id="277" parentId="28">T-Shirts</category>
<category id="140" parentId="277">shorts</category>
</category>

.py

for category in categories:
        for item in category.getElementsByTagName("category"):
            category_name = item.childNodes[0].nodeValue.encode("utf-8")
            category_id = int(item.getAttribute('id'))
            category_parentId = item.getAttribute('parentId')
#connect etc
sqlFillCategories = "INSERT INTO categories(category_id, category_parentId, shop_id, category_name) VALUES ('"+category_id + "', '" + category_parentId + "', '" + TREND_BRANDS_SHOPID + "', '" + category_name + "');"

エラー:

Traceback (most recent call last):
  File "E:/python1/fanswell/parse.py", line 23, in <module>
    sqlFillCategories = "INSERT INTO categories(category_id, category_parentId, shop_id, category_name) VALUES ('"+category_id + "', '" + category_parentId + "', '" + TREND_BRANDS_SHOPID + "', '" + category_name + "');"

TypeError: cannot concatenate 'str' and 'int' objects

どうしてこんなことに?どうしたの?

4

2 に答える 2

5

int と str は異なる型です。

int を str に連結するには、

intへのstr変換を行う必要があります。つまり、例えば:

"Hello World " + str(1)

だからあなたはおそらく欲しい:

 sqlFillCategories = "INSERT INTO categories(category_id, category_parentId,
 shop_id, category_name) VALUES ('"+str(category_id) + "', '" +
 str(category_parentId) + "', '" + str(TREND_BRANDS_SHOPID) + "', '" 
 + category_name + "');"

編集:挿入ステートメントがループの外にあります。これを試してください:

sqlFillCategories =''
for category in categories:
        for item in category.getElementsByTagName("category"):
            category_name = item.childNodes[0].nodeValue.encode("utf-8")
            category_id = int(item.getAttribute('id'))
            category_parentId = item.getAttribute('parentId') 
            sqlFillCategories += 
            "INSERT INTO categories(category_id, category_parentId, shop_id, 
            category_name) VALUES ('"+category_id + "', '" + 
            category_parentId + "','" + TREND_BRANDS_SHOPID + "',
             '" + category_name + "');"

sqlFillCategories一連の挿入を実行するとき。

于 2013-10-09T21:41:15.873 に答える
0

あなたの最後のコメントは、あなたのデータベースにレコードを1つだけ追加することについて尋ねているようです....ループ内でより長い文字列を作成する必要があります

VALUES ('category', 'catid', 'catParentId', store, 'category'), 
('category', 'catid', 'catParentId', store, 'category'), 
('category', 'catid', 'catParentId', store, 'category')



allValues = []
for category in categories:
    for item in category.getElementsByTagName("category"):
        category_name = item.childNodes[0].nodeValue.encode("utf-8")
        category_id = int(item.getAttribute('id'))
        category_parentId = item.getAttribute('parentId')
        myValue = "('"+str(category_id) + "', '" + str(category_parentId) + "', 
        '" + str(TREND_BRANDS_SHOPID) + "', '" + category + "')"
        allValues.append(myValue)

comma_separated = ', '.join(allValues)
sqlFillCategories = "INSERT INTO categories(category_id, category_parentId,
 shop_id,
 category_name) VALUES " + comma_separated + ";"
于 2013-10-09T22:48:09.183 に答える