Python- '不明なエンコーディング:utf8mb4' ON DUPLICATE KEYUPDATEを使用する場合

dataatallured

タイトルのように、ON DUPLICATE KEY UPDATEを使用しようとすると、「不明なエンコーディング:utf8mb4」というエラーが表示されます。代わりにINSERTIGNOREを使用してもこのエラーは発生しませんが、アップサートする機能が失われます。これは私のコードがどのように見えるかです:

MySQL version: 5.7.14-google-log
Python: 3.6.5
mysql-connector: 2.1.6


def mysqlLoader(vals, table, headers):
dbCon = mysql.connector.connect(
    host="-",
    user="-",
    passwd="-",
    database="-",
    charset='utf8mb4'
)

cursor = dbCon.cursor()
sql = generateSQL(table, headers, vals)
try:
    dbCon.autocommit = False
    cursor.execute('SET NAMES utf8mb4')
    cursor.execute("SET CHARACTER SET utf8mb4")
    cursor.execute("SET character_set_connection=utf8mb4")
    print('Executing SQL query...')
    cursor.executemany(sql, vals)
    print('Commiting to MySQL...')
    dbCon.commit()
    print("MySQL Updated Successfully! %s records inserted!" % cursor.rowcount)
except Exception as e:
    print("Could not commit entries: %s" % e)
    sendEmail('Data Loader Failed', 'Table: %s\r\nError: %s' % (table, e))


def generateSQL(table, headers, vals):
    valStrings = getSQLStrings(vals)
    updateVals = getUpdateString(headers)
    sql = 'INSERT INTO %s (%s) VALUES (%s) ON DUPLICATE KEY UPDATE %s' % (table, headers, valStrings, updateVals)
    print("Query created.")
    return sql

def getUpdateString(headers):
"""Outputs an ON DUPLICATE UPDATE string using the given headers."""
temp = ''
split = headers.split(', ')
for item in split:
    temp += '%s=VALUES(%s), ' % (item, item)
temp = temp[:(len(temp)-2)]
return temp

絵文字やその他の文字を削除してutf8に戻すことはできますが、データの整合性のためにそれらを保持したいと思います。どんな助けでも大歓迎です。

編集:executemanyコマンドの問題のようです。一度に1つずつ挿入を実行しても、エラーはスローされません。

dataatallured

興味のある人のために、INSERTの代わりにREPLACEを使用するだけでこれを回避することができました。完璧な解決策ではありませんが、私のニーズにぴったりです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

INSERT INTO ... SELECT ... ON DUPLICATE KEYUPDATEでSQLを使用する場合のエラー1064

分類Dev

Pythonで(utf8mb4)をエンコードする方法

分類Dev

不正な文字列値:列にutf8mb4エンコーディングがあるにもかかわらず、列の '\\ xA0Consu ...'

分類Dev

utf8mb4はC ++でエンコード/デコードします

分類Dev

PythonでUnicode文字を使用する場合の異なるエンコーディング

分類Dev

SQL ON DUPLICATE KEYUPDATEの使用中に複数のレコードを挿入します

分類Dev

INSERT ... SELECT ... ON DUPLICATE KEYUPDATEの「Records」および「Duplicates」カウントを取得する

分類Dev

Pythonリクエスト:非utf-8エンコーディングでJSONを送信する

分類Dev

PythonがUTF-8コーディングを受け入れない

分類Dev

utf-8以外のエンコーディングを使用してPythonでXMLを解析します

分類Dev

PythonでのUTF-16エンコーディングの使用

分類Dev

Ruby- Mysql2エンコーディングutf8mb4は、インデックス作成の問題を引き起こします(したがってパフォーマンスに影響します)

分類Dev

PythonからONDUPLICATE KEYUPDATEを使用する

分類Dev

PythonからONDUPLICATE KEYUPDATEを使用する

分類Dev

cursesborderとpython3でutf-8エンコーディングを使用します

分類Dev

Pythonで壊れたutf-8エンコーディングを修正する方法は?

分類Dev

INSERT ON DUPLICATE KEYUPDATEで「join」を使用することは可能ですか?

分類Dev

ひらがなの書き込み中にコーディングが「#-*-コーディング:utf-8-*-」と宣言されているにもかかわらず、Pythonエンコーディングエラー「非ASCII文字 '\ xff' ...」

分類Dev

(Python)UTF-8エンコーディングを使用して文字列をCSVに書き込む

分類Dev

<meta charset =“ utf-8”>が、JavaScriptがutf-16ではなくutf-8エンコーディングを使用していることを意味する場合

分類Dev

Pythonはutf-8エンコーディングでjsonファイルをロードできません

分類Dev

#-*-コーディングを追加した後のPython構文エラー:utf-8-*-

分類Dev

utf-8以外の文字を読み取るために使用する必要があるPythonエンコーディングタイプはどれですか?

分類Dev

Pythonディープコピーを使用する場合のAttributeError

分類Dev

Pythonでの混合UTF-8エンコーディングを使用したレスポンスのデコード

分類Dev

INSERT ON DUPLICATE KEYUPDATEステートメントを使用した複雑なmysqlクエリエラー

分類Dev

&#x **;を使用するPython文字列エンコーディング

分類Dev

デフォルトのエンコーディングがASCIIの場合、なぜPythonはUnicode文字を出力するのですか?

分類Dev

致命的なPythonエラー:Py_Initialize:sys標準ストリームを初期化できませんLookupError:不明なエンコーディング:65001

Related 関連記事

  1. 1

    INSERT INTO ... SELECT ... ON DUPLICATE KEYUPDATEでSQLを使用する場合のエラー1064

  2. 2

    Pythonで(utf8mb4)をエンコードする方法

  3. 3

    不正な文字列値:列にutf8mb4エンコーディングがあるにもかかわらず、列の '\\ xA0Consu ...'

  4. 4

    utf8mb4はC ++でエンコード/デコードします

  5. 5

    PythonでUnicode文字を使用する場合の異なるエンコーディング

  6. 6

    SQL ON DUPLICATE KEYUPDATEの使用中に複数のレコードを挿入します

  7. 7

    INSERT ... SELECT ... ON DUPLICATE KEYUPDATEの「Records」および「Duplicates」カウントを取得する

  8. 8

    Pythonリクエスト:非utf-8エンコーディングでJSONを送信する

  9. 9

    PythonがUTF-8コーディングを受け入れない

  10. 10

    utf-8以外のエンコーディングを使用してPythonでXMLを解析します

  11. 11

    PythonでのUTF-16エンコーディングの使用

  12. 12

    Ruby- Mysql2エンコーディングutf8mb4は、インデックス作成の問題を引き起こします(したがってパフォーマンスに影響します)

  13. 13

    PythonからONDUPLICATE KEYUPDATEを使用する

  14. 14

    PythonからONDUPLICATE KEYUPDATEを使用する

  15. 15

    cursesborderとpython3でutf-8エンコーディングを使用します

  16. 16

    Pythonで壊れたutf-8エンコーディングを修正する方法は?

  17. 17

    INSERT ON DUPLICATE KEYUPDATEで「join」を使用することは可能ですか?

  18. 18

    ひらがなの書き込み中にコーディングが「#-*-コーディング:utf-8-*-」と宣言されているにもかかわらず、Pythonエンコーディングエラー「非ASCII文字 '\ xff' ...」

  19. 19

    (Python)UTF-8エンコーディングを使用して文字列をCSVに書き込む

  20. 20

    <meta charset =“ utf-8”>が、JavaScriptがutf-16ではなくutf-8エンコーディングを使用していることを意味する場合

  21. 21

    Pythonはutf-8エンコーディングでjsonファイルをロードできません

  22. 22

    #-*-コーディングを追加した後のPython構文エラー:utf-8-*-

  23. 23

    utf-8以外の文字を読み取るために使用する必要があるPythonエンコーディングタイプはどれですか?

  24. 24

    Pythonディープコピーを使用する場合のAttributeError

  25. 25

    Pythonでの混合UTF-8エンコーディングを使用したレスポンスのデコード

  26. 26

    INSERT ON DUPLICATE KEYUPDATEステートメントを使用した複雑なmysqlクエリエラー

  27. 27

    &#x **;を使用するPython文字列エンコーディング

  28. 28

    デフォルトのエンコーディングがASCIIの場合、なぜPythonはUnicode文字を出力するのですか?

  29. 29

    致命的なPythonエラー:Py_Initialize:sys標準ストリームを初期化できませんLookupError:不明なエンコーディング:65001

ホットタグ

アーカイブ