【问题标题】:Passing Python List in SQL Query and stored as list在 SQL 查询中传递 Python 列表并存储为列表
【发布时间】:2015-03-22 19:35:48
【问题描述】:

我有一个场景,我必须通过 python 脚本将 python 列表存储在数据库中。我见过很多解决方案,例如将其转换为元组或删除字符串周围的引号。但它想以 python 列表格式将其存储到数据库中。

['abc@gmaill.com', 'abc2@gmail.com', 'abc3@gmail.com', 'abc4@gmail.com', 'abc5@gmail.com', 'abc6@gmail.com', 'abc7@gmail.com', 'abc8@gmail.com', 'abc9@gmail.com']

我的查询是

sql_test = "UPDATE log_messages SET unique_arguments =  %s , sent_to =  %s where log_id = %s " %  (unique_arguments_list,email_send_to,str(log_id))

得到这个错误

syntax error at or near "["
LINE 1: UPDATE log_messages SET unique_arguments =  ['abc@gmaill.com...
                                                ^

【问题讨论】:

  • 显然列表的字符串表示会导致无效的 sql 语法,您必须修复它(在" 引号中包装列表可能就足够了)或找到其他有效的序列化列表的方法。
  • 显然,我知道这一点,这就是为什么我在这里要求任何替代方案
  • 不清楚你用的是什么数据库/python接口。
  • @MikeT python 脚本与 postgresql 数据库
  • 目前还不清楚你使用的是什么python接口,例如psycopg2、pygresql、pyodbc 等

标签: python sql postgresql psycopg2


【解决方案1】:

这应该可行。您没有将列表字符串括在引号内。

sql_test = "UPDATE log_messages SET unique_arguments =  \"%s\" , sent_to =  %s where log_id = %s " %  (unique_arguments_list,email_send_to,str(log_id))

【讨论】:

  • 这样,字符串会从 \"
  • “字符串中断”是什么意思?
  • 按照您的建议,查询变为UPDATE log_messages SET unique_arguments = "['5_7_Newsletter_abc@gmail.com', '5_7_Newsletter_abc2@gmail.com', '5_7_Newsletter_abc3@gmail.com', '5_7_Newsletter_abc4@gmail.com', '5_7_Newsletter_abc5@gmailvalid.com', '5_7_Newsletter_abc6@gmail.com', '5_7_Newsletter_abc6@gmail.com', '5_7_Newsletter_abc7@gmail.com', '5_7_Newsletter_abc9@gmail.com']" , sent_to = "['abc@gmaill.com', 'abc2@gmail.com', 'abc3@gmail.com', 'abc4@gmail.com', 'abc5@gmail.com', 'abc6@gmail.com', 'abc7@gmail.com', 'abc8@gmail.com', 'abc9@gmail.com']" where log_id = 5
  • 现在查看参数,将查询用双引号括起来,因为它在字符串中来自
  • 嗯,不应该吗?应该以哪种格式存储?据我所知,SQL 中没有列表格式之类的东西。这样的事情是没有意义的。
猜你喜欢
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多