前提・実現したいこと
以下の文字列(table)にあるクォーテーションを削除し、動的にSQLのテーブル名を渡したいです。
同じようなコードがいくつか存在するため、テーブル名だけ変えて共通化することが目的です。
MySQLバージョン : 5.7.37
python
1class Fruit22Manager(models.Manager): 2 table = 'fruit_22'.replace("'", "") 3 # fruit_22のクォーテーションを削除したい 4 5 def find_status(self): 6 import pdb; pdb.set_trace() 7 # 関数実行時、self.table には 'fruit_22' が入っています。 8 sqlresult = self.raw(''' 9 SELECT 10 f.id, f.price, f.status 11 FROM 12 %s AS f # fruit_22を渡したいです 13 WHERE 14 f.state = 1 15 ''',[self.table])
発生している問題・エラーメッセージ
クォーテーションがreplaceで削除されず、構文エラーが起きます。
(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’fruit_22’ AS f\n line 4")
ターミナル
sqlresult = self.raw(''' SELECT f.id, f.price, f.status FROM 'fruit_22' AS f WHERE f.state = 1 ''',[self.table])
試したこと
①数字のみ引数で渡す
無事に実行できましたが、数字がないテーブルにも汎用的に共通化したいため保留。
python
1class Fruit22Manager(models.Manager): 2 year = 22 3 4 def find_status(self): 5 sqlresult = self.raw(''' 6 SELECT 7 f.id, f.price, f.status 8 FROM 9 'fruit_'%s AS f 10 WHERE 11 f.state = 1 12 ''',[self.year])
②stripなど他の削除方法で実行(全てクォーテーション削除されず)
参考記事:https://www.delftstack.com/ja/howto/python/python-remove-quotes-from-string/
③他のファイルでテスト
試しに別ファイルを作成してreplaceを実行。(別ファイルでは削除できました)
hoge.py
hoge = 'fruit_22'.replace(' ', '') print(hoge)
実行結果
# 別ファイルだとなぜか削除できる fruit_22
なぜclass Fruit22Manager(models.Manager):
でtableを定義すると、
クォーテーションが削除されないか原因を特定できておりません。
解決の糸口になるヒントを頂けますと幸いです。
よろしくお願いいたします。