将字符串格式的日期时间插入我的数据库导致我出现此错误。有啥解决办法吗?

Posted

技术标签:

【中文标题】将字符串格式的日期时间插入我的数据库导致我出现此错误。有啥解决办法吗?【英文标题】:Inserting a string formatted datetime into my db has lead me to this error. Any solutions?将字符串格式的日期时间插入我的数据库导致我出现此错误。有什么解决办法吗? 【发布时间】:2019-09-17 07:44:49 【问题描述】:

脚本正在正确读取字符串,但它似乎无法继续并插入到数据库中。

这是我的一个家庭项目。我正在使用 RasPi 3 ModelB+。

a = input('Scan Card: ')
now = datetime.strftime('%H:%M:%S')

#This is the insert line
tapped = "INSERT INTO log (rfid, taptime) VALUES (%s, %s)" %(a, now)
t = conn.cursor()
t.execute(tapped)
conn.commit()
Traceback (most recent call last):
  File "door.py", line 54, in <module>
    t.execute(tapped)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 170, in execute
    result = self._query(query)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 328, in _query
    conn.query(q)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 517, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 732, in _read_query_result
    result.read()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1075, in read
    first_packet = self.connection._read_packet()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 684, in _read_packet
    packet.check_error()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.ProgrammingError: (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':40:44)' at line 1")

我只想要一个被窃听卡片的日志数据库。

【问题讨论】:

【参考方案1】:

您不应该使用字符串替换,而是在执行时将值作为参数传递:

tapped = "INSERT INTO log (rfid, taptime) VALUES (%s, %s)")
t = conn.cursor()
t.execute(tapped, (a, now))

【讨论】:

【参考方案2】:

我不确定,但错误在这里

现在 = datetime.strftime('%H:%M:%S')

问题是您使用的是 H 、 M 和 S 。 尝试: date("Y-m-d H:i:s") 使用数值的地方

您必须为 24 小时格式执行此操作。

【讨论】:

不是案例打印(现在)结果到 21:17:42.883302 感谢您的回复 它有帮助吗? @Reksi 没有。抱歉语法是正确的,只是字符串不在参数中

以上是关于将字符串格式的日期时间插入我的数据库导致我出现此错误。有啥解决办法吗?的主要内容,如果未能解决你的问题,请参考以下文章

将日期时间插入数据库

将 JDateChooser 中的日期插入 Oracle DB

如何使用pyspark函数处理日期格式的T和Z

Spring Data ElasticSearch JSON日期格式导致NullpointException

iOS - 日期格式导致年份+1

如何将欧洲格式的字符串日期转换为有效的 mysql 日期格式?