【问题标题】:Using a variable for a table name with python sql cursor使用带有 python sql 游标的表名的变量
【发布时间】:2018-12-03 17:38:42
【问题描述】:

我正在使用 python sql 游标来动态访问我的数据库,并且我想使用一个变量来代替表名。到目前为止,我所有的尝试都导致了语法错误,尽管我(认为?)我正在按预期做事?除非作为变量的表名与作为变量的值不同:

这是我目前拥有的:

cursor.execute("INSERT INTO %s (word=%s,item_id=%s,word_tag=%s,unstemmed_word=%s, word_position=%s, TF=%s, normalized_term_frequency=%s, sentence=%s,anthology_id=%s) "%(table_name, stemmedWord,fle.split()[0], str(word[1]), uniqeWord, word_pos, TF, normalized_term_frequency, sentence, fle.split()[1].split(".")[0]))

我也试过这个:

cursor.execute("INSERT INTO %s (word,item_id,word_tag,unstemmed_word, word_position, TF, normalized_term_frequency, sentence,anthology_id) values(%s, %s,%s, %s, %s, %s, %s, %s, %s)",(table_name, stemmedWord,fle.split()[0], str(word[1]), uniqeWord, word_pos, TF, normalized_term_frequency, sentence, fle.split()[1].split(".")[0]))

【问题讨论】:

  • 你用什么dbapi?

标签: python sql python-cursor


【解决方案1】:

您不能动态绑定对象名称,只能绑定值。您必须对表的名称进行字符串操作。例如:

sql = "INSERT INTO {} (word=%s,item_id=%s,word_tag=%s,unstemmed_word=%s, word_position=%s, TF=%s, normalized_term_frequency=%s, sentence=%s,anthology_id=%s)".format(table_name)

cursor.execute(sql % (stemmedWord,fle.split()[0], str(word[1]), uniqeWord, word_pos, TF, normalized_term_frequency, sentence, fle.split()[1].split(".")[0]))

【讨论】:

    【解决方案2】:

    如果您使用的是 python >= 3.6,这可能会更好:

     cursor.execute(f'INSERT INTO {table_name} (word="{stemmedWord}",item_id={fle.split()[0]},word_tag={str(word[1])},unstemmed_word="{oword_posrmuniqeWord}", word_position=word_pos, TF={TF}, normalized_term_frequency={normalized_term_frequency}, sentence="{sentence}",anthology_id={fle.split()[1].split(".")[0])}' 
    

    但我认为您的语法错误来自两件事:

    1. 您提供了一个字符串来拆分文件。 (更正此默认为空格 - 可以!)

    2. 您没有在 sql 字段中引用看似明显的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      相关资源
      最近更新 更多