2

Pythonを使用してmysql-connectorを介してmysqlテーブルに挿入したい8種類のデータがあります。mysql-connector を使用する場合は、int、string、または tupleを使用する方がよいというドキュメントをいくつか見ました。いくつかのデータ型を文字列またはタプルに調整しようとしましたが、IDE はエラーを表示し続けます.. 誰かが私が使用するデータ型を明確にするのを助けてください。

データ構造は次のように設定されています(何か変更した方がよい場合は、親切にお知らせください):

+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| URL      | varchar(1023) | YES  |     | NULL    |       |
| Title    | varchar(1023) | YES  |     | NULL    |       |
| Content  | varchar(1023) | YES  |     | NULL    |       |
| Month    | varchar(1023) | YES  |     | NULL    |       |
| Date     | varchar(1023) | YES  |     | NULL    |       |
| Year     | varchar(1023) | YES  |     | NULL    |       |
| Time     | varchar(1023) | YES  |     | NULL    |       |
| TimeZone | varchar(1023) | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+

私のコードは次のとおりです。

for i in range(len(URL)):
    dbcur.execute(
        """INSERT INTO scripting (URL, Title, Content, Month, Date, Year, Time, TimeZone)
           VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")""",
           ((URL[i],), (Title[i],), (Content[i],), (Month[i],), (Date[i],), (Year[i],), 
           (Time1[i],), (TimeZone[i],)))
    dbcon.commit()

ps- URL[]、Title[]、Content[]... TimeZone[] はデータのリストであり、それらの範囲は同じです。

  • URL: URL. これをタプルで設定してみました(正常に保存できました)

  • (Title[i],)タイトル: エッセイのタイトル (つまり、文) を使用してタプルまたは文字列として設定しようとしましStringIO.String(Title[i])たが、エラーは

    MySQLConverter' object has no attribute '_tuple_to_mysql  
    AttributeError: 'module' object has no attribute 'String'
    

    別々に。

  • 内容:数文。上記と同じ問題に直面した

  • Month、Date、Year、Time、TimeZone: まだ試していませんが、これらのデータをタプル型でインポートできるのでしょうか?

私はstackoverflowを見て、いくつかのデータ型を試しましたが、まだうまくいきません。これらのデータをどのように処理すればよいでしょうか?

4

3 に答える 3

0

ここに解決策があります。

例として 3 つの列だけを考えてみましょう。URL、タイトル、およびコンテンツ。あなたが言及したように、URLなどはデータのリストです。

URL=['url1','url2','url3']
TITLE=['title1','title2','title3']

等々。また、DATABASE テーブルにも同じ列があります。

cursor_object.execute(query,params)

ここにクエリを書きましょう:

query='''
INSERT INTO scripting(URL, TITLE, CONTENT)
VALUES (%s,%s,%s)'''

そしてSQLコマンドを実行します:

cursor_object.execute(query%(URL[i],TITLE[i],CONTENT[i]))

以下に翻訳すると、最初の繰り返しの結果になります。

'INSERT INTO scripting(url, title)VALUES (url1,title1)' url1 は、実際に mysql クエリに変換すると、ここの文字列ではありません。そのため、少し変更する必要があります。

query='''
INSERT INTO scripting(URL, TITLE, CONTENT)
VALUES ("%s","%s","%s")'''

また

または、ディクショナリ メソッドを使用することもできます。

query=''' *query statement* values
(%(url)s,%(title)s,%(content)s)
dictionary={'url':'url1','title':'title1','content':'content1'}
cursor_object.execute(query,dictionary)

複数行の場合:

for i in range len(URL):
    cursor_object.execute(query,{'url':URL[i],'title':TITLE[i],'content':CONTENT[i]}

最も簡単な解決策は、@Antti Haapala によって提供されました。お楽しみください。

于 2020-09-05T12:23:37.990 に答える
-1

zipAntti Haapala には素晴らしい答えがありますが、挿入する行を作成するために使用して整理することもできます

for row in zip(URL, Title, Content, Month, Date, Year, Time1, TimeZone):
    dbcur.execute(
        """INSERT INTO scripting (URL, Title, Content, Month, Date, Year, Time, TimeZone)
           VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")""",
           row)
    dbcon.commit()
于 2016-03-10T07:56:55.327 に答える