1

関数の呼び出し時に関数内の SQL ステートメントの引数が渡されると、mysql-connector は最初に eof を返し、次に「columns」行を返します。これにより、最初に eof 行を処理することで空の結果が表示されます。

次のコードは機能し、行を返します。ただし、関数を呼び出して値を渡すときに data = ('ABC','XYZ') を data = (symbol,exchangetr) に置き換えると、コードは機能せず、空のタプルが返されます。

import mysql.connector
import datetime

def connectToDB():
    config = {
        'user': '',
        'password': '',
        'host': '',
        'raise_on_warnings': True,
        'port':,
        'database': '',
    }
    cnx = mysql.connector.connect(**config)
    print('connection successful')
    return cnx


def closeConnToDB(cnx):
    cnx.close()
    print('close connection successful')

cnx = connectToDB()
cnx.get_warnings = True
dBcursor = cnx.cursor()


def getInstrumentToken(symbol, exchangetr):
    query = "SELECT abc FROM xyz WHERE x = %s and y = %s"
    ***data = ('ABC','XYZ')***
    dBcursor.execute(query, data)
    print(dBcursor.fetchwarnings())
    print(dBcursor.fetchall())
    dBcursor.close()
    closeConnToDB(cnx)
    return

getInstrumentToken('ABC', 'XYZ')

コードをデバッグすると、関数を呼び出して引数を渡すと、次のものが MYSQL サーバーから返されることがわかりました。

{'eof': {'warning_count': 0, 'status_flag': 33}, 'columns': [('instr_token', 3, None, None, None, None, 0, 4097)]}

しかし、データ変数をハードコーディングして引数を直接渡すと、MYSQL サーバーから次のようになります。

{'columns': [('instr_token', 3, None, None, None, None, 0, 4097)], 'eof': {'warning_count': 0, 'status_flag': 33}}

最初に EOF 行を処理すると、mysql-connector は誤ってゼロ行が表示されます。私は python の初心者で、mysql-connector にいくつかの微妙な問題があるようです。私のコードの問題は何ですか? 外部から SQL ステートメントに引数を渡すことはできませんか? 助けてください。

4

0 に答える 0