【问题标题】:How can I insert a custom datetime into sql via python?如何通过python将自定义日期时间插入sql?
【发布时间】:2021-10-01 03:18:24
【问题描述】:

我正在尝试将自定义日期时间字符串插入到我的 maria 数据库中。我有这样的代码:

import MySQLdb

db = MySQLdb.connect(host="xxx", user="xxx", passwd="xxx", db="xxx")

cur = db.cursor()


cur.execute("INSERT INTO `xxx` (`ID`, `datetime`) VALUES ('1', %s)" % ('2021-07-01 00:00:00'))

db.commit()
db.close()

我的 maria db 大约有两列:

  1. id,类型为int,主键
  2. datetime,类型为datetime,默认为0

我正在我的 Raspberry Pi 上运行脚本。

运行此 Python 代码后,我收到此错误:

Traceback(最近一次调用最后一次):

文件“datenbank.py”,第 8 行,在
cur.execute("INSERT INTO datetime (id, datetime) VALUES ('1', %s)" % ('2021-07-01 00:00:00'))

文件“/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py”,第 250 行,在执行中
self.errorhandler(self, exc, value)

文件“/usr/lib/python2.7/dist-packages/MySQLdb/connections.py”,第 50 行,在默认错误处理程序中
提高错误值

_mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 '00:00:00)' 附近使用正确的语法")

如何在我的数据库中插入自定义日期时间?

【问题讨论】:

  • 检查 mariadb 版本。我认为存在语法问题。试试 cursor.execute(Query1,"anyvalue that will be pass")

标签: python mysql sql mariadb


【解决方案1】:

应用% 字符串格式化运算符后,传递给cur.execute 的结果字符串为:

"INSERT INTO `xxx` (`ID`, `datetime`) VALUES ('1', 2021-07-01 00:00:00)"

但你需要:

"INSERT INTO `xxx` (`ID`, `datetime`) VALUES ('1', '2021-07-01 00:00:00')"

所以开始:

cur.execute("INSERT INTO `xxx` (`ID`, `datetime`) VALUES ('1', '%s')" % ('2021-07-01 00:00:00'))

更好的是,根本不要使用% 字符串格式化运算符。相反,使用准备好的语句,其中%s 表示要被MySQLdb 驱动程序替换的参数,并且实际参数值作为第二个参数作为列表或元组提供:

cur.execute("INSERT INTO `xxx` (`ID`, `datetime`) VALUES ('1', %s)", ('2021-07-01 00:00:00',))

使用准备好的语句将防止在从外部来源提供值时可能发生的 SQL 注入攻击。

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2019-11-02
    • 2013-05-19
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多