2014-10-12 5 views
1

데이터를 삽입하는 테이블의 변수 이름을 동적으로 변경하고 싶습니다. 테이블 이름을 variable로 바꿉니다. 파이썬과 MySQL 커넥터 사용

이 현재 작동

,

def dataEntry(subreddit, _title, _post_url, _imageURL): 
    cnx = mysql.connector.connect(**config) 

    c = cnx.cursor() 
    insert = ("""INSERT INTO FoodPorn 
        (subreddit, title, post_url, imageURL) 
        VALUES (%s, %s, %s, %s)""") 

    data_value = (subreddit, _title, _post_url, _imageURL) 

    c.execute(insert, data_value) 
    cnx.commit() 
    c.close() 
    cnx.close() 

dataEntry("fake", "fake", "fake", "fake") 

그러나 나는 시도하고이 경우 "FoodPorn"의 테이블 이름에 대한 동일한 작업을 수행하지만, 경우에 그러한 예 MachinePorn에서와 같이 동적 하나,

def dataEntry(subreddit, _title, _post_url, _imageURL): 
    cnx = mysql.connector.connect(**config) 

    c = cnx.cursor() 
    insert = ("""INSERT INTO subredditName 
        (subreddit, title, post_url, imageURL) 
        VALUES (%s, %s, %s, %s, %s)""") 

    data_value = ("MachinePorn", subreddit, _title, _post_url, _imageURL) 

    c.execute(insert, data_value) 
    cnx.commit() 
    c.close() 
    cnx.close() 

dataEntry("fake", "fake", "fake", "fake") 
나는이 오류가

mysql.connector.errors.ProgrammingError: 1146 (42S02): Table 'sytykr.subredditname' doesn't exist 

이 내가이 방법을 수행 할 수 없습니다 믿고 날 리드하고 그래서 나는 하시다 uld님께 물어보고 싶은데 어떻게해야할까요? 매번 하드 코드하지 않고 결국 테이블의 변수 이름을 전달할 수 있습니다.

답변

4

mysql 커넥터를 표시하는 예외는 데이터베이스가 테이블이 존재하지 않는다고 말합니다.

또한 'MachinePorn'을 인수로 사용하려고하지만 쿼리에서이를 정의하지 않은 경우 하드 코드 된 'subredditName'이 지정됩니다.

나는 쿼리의 다른 매개 변수로 데이터베이스를 정의해야한다고 생각하고 그것을 잘 실행됩니다 : 이것은 부분적으로 올바른

def dataEntry(subreddit, _title, _post_url, _imageURL): 
    cnx = mysql.connector.connect(**config) 

    c = cnx.cursor() 
    table_name = "MachinePorn" 
    insert = "INSERT INTO " + table_name + " (subreddit, title, post_url, imageURL) VALUES (%s, %s, %s, %s)" 

    data_value = (subreddit, _title, _post_url, _imageURL) 

    c.execute(insert, data_value) 
    cnx.commit() 
    c.close() 
    cnx.close() 

dataEntry("fake", "fake", "fake", "fake") 
+2

. 준비된 문에서 테이블 이름을 매개 변수화할 수 없습니다. 쿼리 문자열을 ('cnx.escape_string()'을 통해 이스케이프 처리 된) 테이블 이름과 직접 연결해야합니다. –

+0

하지만 DB API v2.0을 준수하는 mysql.connector를 사용하고 있습니다. 왜 문자열을 수동으로 scape해야합니까? –

+0

참조 http://stackoverflow.com/questions/11312737/can-i-parameterize-the-table-name-in-a-prepared-statement –