次のテーブルを持つproject1というデータベースがあります。
_systbl1
_systbl2
_systbl3
dataset1
dataset2
dataset3
MySQLユーザーodbcには、新しいテーブルが追加されるたびに、データセット%テーブルに対するSELECT権限を付与する必要があります。
これを実現するために、次のような単純なPythonスクリプトを使用しています。
#!/usr/bin/python
import MySQLdb
db = MySQLdb.connect(
host="localhost",
user="user",
passwd="pass",
db="project1"
)
# Create Cursor Object
cur = db.cursor()
# get list of tables beginning with dataset
cur.execute("SHOW TABLES FROM project1 LIKE 'dataset%';")
# run GRANT statement for each table
for row in cur.fetchall() :
cur.execute("GRANT SELECT ON `project1`.`%s` TO `odbc`@`localhost`;", row)
cur.execute("GRANT SELECT ON `project1`.`%s` TO `odbc`@`%`;", row)
残念ながら、次のエラーが発生します。
Traceback (most recent call last):
File "mysql_query.py", line 20, in <module>
cur.execute("GRANT SELECT ON `project1`.`%s` TO `odbc`@`localhost`;", row)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1146, "Table 'project1.'dataset1'' doesn't exist")
エラーの最後の行でわかるように、問題は、Pythonがクエリを生成するときにテーブル名を一重引用符で囲んでいることです。
ここで何が欠けていますか?