【发布时间】:2017-03-02 20:55:33
【问题描述】:
以下是我的代码示例。
SENTENCE = "Today is a wonderful day."
sent= (word_tokenize(SENTENCE))
cursor = conn.cursor()
cursor.execute('SELECT * FROM emotion_state WHERE key_word = %s', (sent))
results = cursor.fetchall()
for i in results:
print(i)
这里我需要检查“已发送”数组中的单词是否在数据库中可用。如果“已发送”数组中的数据库中有一些可用的关键字,我需要获取所有关键字。我尝试按照以下方式进行尝试,它会产生错误
raise errorclass(errorvalue)
_mysql_exceptions.ProgrammingError: not all arguments converted during
string formatting
如何轻松进行比较?
【问题讨论】:
-
如果
sent需要是一个元组,你应该在其中添加一个逗号,如(value,),以防它是单个值。 -
@Arount,不,使用
%运算符会使这容易受到 SQL 注入的攻击。让execute进行绑定可以正确转义参数。 -
但它会出错
-
@Sjoerd 哎呀,你是对的,我从互联网上删除了这个糟糕的建议 :)
-
至少你从一开始就使用占位符。有关如何构建占位符以匹配 IN 运算符的列表,请参阅链接的 q/a。或者转移到 Postgresql 并让 psycopg2 为您处理列表。还有SQLAlchemy,它让 Python 中的 SQL 生活变得更加轻松。