【问题标题】:Unable to insert an article into MySQL Python无法将文章插入 MySQL Python
【发布时间】:2016-06-13 08:09:50
【问题描述】:

我正在尝试将整篇文章插入 MySQL 数据库,但没有成功。 我想我有一个编码问题,因为当我打印时,它开始了 使用'[u' .. 我尝试了一些代码,但没有成功。内容/文章可能包含 ," 导致 sql 文本混乱

这是我的代码,它会引发错误输入..

    k1 = str(mmhtml)
    for filde in cur.fetchall():
         faliase = filde[0]
         fpattern = filde[1]
         furutan = filde[2]
         fopsi = filde[3]
         freplacer = filde[4]
         k1 = re.sub(fpattern , freplacer, k1)
         k2 = k1.encode('ascii')

    Item['konten'] = k2.strip() 

    sqlinsert = "INSERT IGNORE INTO tb_hasil(title, \
            datee, content, author, ling) \
            VALUES ('%s', '%s', '%s', '%s', '%s' )" % \
            (jdl, tgl, k2.strip() , sauto,str(response.url))
    try:
         cur.execute(sqlinsert)
    except:
         print "error input"

提前致谢

【问题讨论】:

  • 这里存在多个问题,您提供的有关输入的细节很少。似乎您将列表作为参数传递('[u' 作为字符串格式化的结果)。对于初学者,永远不要使用字符串格式传递值(此处为 % 运算符)。你根本不应该养成它的习惯。而是使用占位符/准备好的语句。从%s 格式化程序周围去除单引号并将参数元组分别传递给cur.execute()cur.execute(sqlinsert, (jdl, tgl, ...))。这样你就不用担心自己逃跑了。
  • 这不会修复您的代码,但通常是朝着更安全的代码迈出的一步。
  • @IljaEverilä 感谢您的回复,我正在尝试实施您的建议.. 我是 python 新手,所以我根据我找到的示例进行了操作
  • 如果您想要好的答案,您应该稍微修改一下您的问题。尽量保持最小,但一定要完整:只包含您认为相关的位,并包括所有输入、变量、数据库模式等。这并不意味着代码转储,您不必粘贴自己的代码逐字。代码应该是可验证的。明确你期望的输出和你实际得到的。 “因为当我打印时,它以 '[u' ..” 开头,非常非常模糊。
  • @IljaEverilä 好的,我明白了,谢谢你的建议。我很抱歉,因为我是新来的

标签: python mysql scrapy


【解决方案1】:

您好,您使用哪个库?

据我所知,大多数库都实现了 DB-API commons。因此,您可以通过参数化发送数据,从而防止 sql 注入。

我在python中使用oursql,语法是:

curs.execute('SELECT * FROM `some_table` WHERE `col1` = ? AND `col2` = ?',
(42, -3))

所以你用 ? 替换值并在元组中传递参数

//curs.execute("... INTO Values (?, ?, ?)", (1,2,3))

【讨论】:

  • 它也遵循 DB-API 规则:只用 %s 比 ?例如//curs.execute("... INTO 值 (%s, %s, %s)", (1,2,3))
猜你喜欢
  • 1970-01-01
  • 2018-07-08
  • 2019-01-19
  • 1970-01-01
  • 2019-03-20
  • 2013-01-05
  • 1970-01-01
  • 2011-04-20
  • 2013-04-18
相关资源
最近更新 更多