Python,MySQL:flags,)=struct_unpack('<xHIBHBxx',packet)struct.error:unpack需要13字节的缓冲区

2024-09-27 21:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在扩展一点。但是别担心,我不会从桥上跳下来的

我想在我的数据库中插入。但不幸的是,我收到了以下错误消息:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/protocol.py", line 247, in parse_column
    flags, _) = struct_unpack('<xHIBHBxx', packet)
struct.error: unpack requires a buffer of 13 bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./bahncardkk-expo.py", line 240, in <module>
    sqlinsert(postaktdatumhms,betrag,nbetrag,GUID,sqldescription) #gebe die gesammelte Daten in die def funktion sqlinsert für ein SQL Injection
  File "./bahncardkk-expo.py", line 198, in sqlinsert
    mydb.commit()
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 852, in commit
    self._execute_query("COMMIT")
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 871, in _execute_query
    self.cmd_query(query)
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 490, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/connection.py", line 404, in _handle_result
    columns[i] = self._protocol.parse_column(
  File "/usr/local/lib/python3.8/dist-packages/mysql/connector/protocol.py", line 249, in parse_column
    raise errors.InterfaceError("Failed parsing column information")
mysql.connector.errors.InterfaceError: Failed parsing column information

代码:

from time import sleep
from datetime import datetime
import mysql.connector
import requests
import random


# SQL INSERT ---------------------------------------------------------------------------

mydb = mysql.connector.connect(
  host="qwertz",
  user="user",
  password="forget",dariokoceic
  database="gnucash",
  buffered=True
)

nbetrag         = -500
betrag          = 500
GUID            = f263a9ab9960443e89479d018d37c1cc
sqldescription  = 'Einkaufen'
postaktdatumhms = '20201223092741'

def sqlinsert (postaktdatumhms,betrag,nbetrag,GUID,sqldescription):

    sleep(1) 
    # und einige Zufallsvariabeln erstellt werden
    idkey1   = ("ffffdf1000000000000000"+("%5.0f"%(random.uniform(10000,18000)))+("%5.0f"%(random.uniform(10000,19000))))
    idkey2   = ("ffffdf2000000000000000"+("%5.0f"%(random.uniform(10000,19000)))+("%5.0f"%(random.uniform(10000,19000))))
    idkeyt   = ("ffffdfd000000000000000"+("%5.0f"%(random.uniform(10000,20000)))+("%5.0f"%(random.uniform(10000,19000))))
    idzufk   = ("%5.0f"%(random.uniform(10000,22000)))
    aktdatum         = datetime.now().strftime("%Y%m%d")
    enteraktdatumhms = datetime.now().strftime("%Y%m%d%H%M%S")
    sqldescription = str(sqldescription[:10])

    print(sqldescription)
    # Abbuchungskonto SOLL - Kreditkart
    sqlcursor.execute("""
    INSERT INTO `gnucash`.`splits` (`guid` , `tx_guid`, `account_guid`                   , `memo`, `action`, `reconcile_state`, `reconcile_date`     , `value_num`, `value_denom`, `quantity_num`, `quantity_denom`)
    VALUES                         (%s     ,%s        ,'3a91ecde057dcf3c00f33219b076cfdc', ' '   , ' '     , 'n'              , '1970-01-01 00:00:00', %s         , '100'        , %s            , '100');
    """,(idkey1,idkeyt,nbetrag,nbetrag))
    mydb.commit()

    # Zubuchsqlinsertungskonto HABEN - z.B. Essen
    sqlcursor.execute("""
    INSERT INTO `gnucash`.`splits` (`guid` , `tx_guid`, `account_guid`                   , `memo`, `action`, `reconcile_state`, `reconcile_date`     , `value_num`, `value_denom`, `quantity_num`, `quantity_denom`)
    VALUES                         (%s     ,    %s    ,  %s                              ,  ' '  , ' '     , 'n'              , '1970-01-01 00:00:00',   %s       , '100'        , %s            , '100');
    """,(idkey2,idkeyt,GUID,betrag,betrag))
    mydb.commit()

    # Transaktions ID (verbindet die zwei oberen zur einer Transaktions mitereinander) und wann
    sqlcursor.execute("""
    INSERT INTO `gnucash`.`slots`  (`id`   , `obj_guid`, `name`       , `slot_type`, `int64_val`, `timespec_val`       , `numeric_val_num`, `numeric_val_denom`, `gdate_val`)
    VALUES                         ( %s    ,  %s       , 'date-posted', '10'       , '0'        , '1970-01-01 00:00:00', '0'              , '1'                ,  %s        );
    """,(idzufk,idkeyt,aktdatum))
    mydb.commit()

    # Transaktionsbeschreibung sowie enter_date und Datum wann das geeschäfts statt fand
    sqlcursor.execute("""
    INSERT INTO `gnucash`.`transactions` (`guid` , `currency_guid`                   , `num`, `post_date`, `enter_date`, `description`)
    VALUES                              ( %s    , 'bc59ea336e0e432d98568cc5ba4a5e5b', ' '  ,    %s      ,       %s    ,  %s );
    """,(idkeyt,postaktdatumhms,enteraktdatumhms,sqldescription))
    mydb.commit()

sqlinsert (postaktdatumhms,betrag,nbetrag,GUID,sqldescription)

我不明白错误在哪里。如何在结构中传输更多字节? 紧接着,我得到了一个“解析列信息失败”的错误。我怀疑有些绳子太长了。我可能得缩短它。但在db中的关键列中,它可以变长,这是description,并设置为VARCHART(2048)。没有那么长的描述。有人会押韵吗


Tags: inpyconnectorlibpackagesusrlocaldist

热门问题