2017-01-10 8 views
0

私は変数に渡すことができる関数を記述しようとしていますが、この変数は何とかMYSQL文に渡すことができます。Python with MYSQL

私はテーブルに値を追加する必要がありますが、テーブルに名前を付けるために変数を使用するときは機能しません。

下記のコードの一部を確認してください:

感謝 K

def __init__(self): 
    self.connection = pymysql.connect(host='localhost', 
            user='root', 
            password='Mandy123', 
            db='connectiontest', 
            cursorclass=pymysql.cursors.DictCursor) 

    self.mycursor = self.connection.cursor() 

def create_table(self, name): 
    sql = (
     "CREATE TABLE IF NOT EXISTS (%S) " 
     "(id int auto_increment primary key, date date, " 
     " open float, high float, low float, close float, " 
     " volume float)" 
     ) 
    self.mycursor.execute(sql) 
    self.connection.commit() 

name= input('what is the sql table name ? ') 
db= sql_manager() 

db.create_table(name) 
+0

変数 'name'はどこのSQL文にも入れません。また、ユーザが 'name'のために置くものに注意してください。 – dstudeba

答えて

0

はまず、あなたは全くcreate_tablenameを使用するためには表示されません。第二に、このようにテーブル名をパラメータ化することはできません。テーブル名を挿入するには、formatのようなものを使用する必要があります。 "CREATE TABLE IF NOT EXISTS {}".format(name)など、この入力がどこから来るのかに応じて、この入力をサニタイズする必要があります。

0

まあ、それは簡単です:)

次の2つのオプションがあり、しかし私は、文字列の書式機能を使用するためにあなたをお勧めします。

def create_table(self, name): 
    # you can use multiline string """ which makes it easier to read. 
    # notice {0}. That is a place you want to insert first value passed to 'format' function. 
    sql = (
     """ 
     CREATE TABLE IF NOT EXISTS ({0}) 
     (id int auto_increment primary key, date date, 
     open float, high float, low float, close float, 
     volume float)" 
     """.format(name) 
     ) 
    self.mycursor.execute(sql) 
    self.connection.commit() 

もっと詳しくはこちらをご覧ください。 % vs format