関数の呼び出し時に関数内の 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 ステートメントに引数を渡すことはできませんか? 助けてください。