前提・実現したいこと
仮想上でpython3にてVirusTotalのApiを複数使用してその結果をデータベースに格納したいです。
■その上でsql文を書いているのですがsqlの構文が間違っているとエラーが吐かれます。
発生している問題・エラーメッセージ
エラーメッセージ ```mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '+= 1 where id = 1' at line 1 また、SQL文のどこが間違っているか調べるために直接SQL内にて打ってみた結果のエラー文になります。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%d' at line 1 ### 該当のソースコード ```ここに言語を入力 class Analysis: def __init__(self,analysis_id): #database接続 self.connect = mysql.connector.connect(user='root', password='', host='localhost', database='〇', charset='utf8') self.connect.autocommit = True self.cursor = self.connect.cursor(buffered=True) self.analysis_id = analysis_id self.cursor.execute('use 〇') self.analyse_url = "https://www.virustotal.com/vtapi/v2/url/scan" def virustotal(self): self.url = str(self.cursor.execute('select short_url from short_urls where id = %d' % (self.analysis_id))) #現在の時間 now = datetime.datetime.now() self.cursor.execute('select Max(id) from virustotal_api_keys') record = self.cursor.fetchone() mMax = record[0] #idの最大値をVirustotal_api_keysから取得 for m in range(mMax): #now.minuteとuse_timeが一緒 self.cursor.execute('select use_time from virustotal_api_keys where id = %d' % (m+1)) if str(now.minute) == str(record[0]): #この分に使った回数が4回かrecord = self.cousor.fetchone() self.cursor.execute('select use_numbers from virustotal_api_keys where id = %d ' % (m+1)) record = self.cursor.fetchone() if int(record[0]) == 4: #今見ているidが最大値を満たしているか if m + 1 == mMax: time.sleep(60) #sleepしたらidの探索を元に戻す m = -1 continue else: break else: self.cursor.execute('update virustotal_api_keys set use_numbers = 0 where id = %d' % (m+1)) break self.cursor.execute('select api_key from virustotal_api_keys where id = %d' % (m+1)); record = self.cursor.fetchone() self.apikey = str(record[0]) self.__calc() #table virustotal_api_keysのuse_time,use_numbersにnow,use_number+1をして格納 self.cursor.execute('update virustotal_api_keys set use_time = now(),use_numbers += 1 where id = %d' % (m+1)) ```### 試したこと この中のSQL文を試したところやはり%dに対して全てエラーを吐いているような気がしました。 %dには変数が入る予定です。 エラー文を見る限り%d以外の似た書き方をしてくださいと言われています。 ### 補足情報(FW/ツールのバージョンなど) Python3.5 mysql-connector-python データベース自体はMariaDBを使っています もしもSQL文において変数出力の書き方が間違っている場合どのように修正したらよいか教えていただきたいです。どうかよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー