【问题标题】:MySQLdb - Naming Tables using datetime module in PythonMySQLdb - 在 Python 中使用 datetime 模块命名表
【发布时间】:2014-01-10 12:54:00
【问题描述】:

我在 Python 中使用 MySQLdb 模块创建表,但在尝试使用 datetime 模块命名时遇到了一些问题。

class DbPipeline(object):
def __init__(self):
    vendor = "vendorname"
    curDate = time.strftime('%Y-%m-%d').replace("-", ".")
    tableName = vendor + ":" + curDate

    # connect to the database
    self.conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='', db='dbname', charset="utf8", use_unicode=True)
    self.cursor = self.conn.cursor()

    #create a new table
    sql = "CREATE TABLE %s (name CHAR(40))" %tableName
    self.cursor.execute(sql)

这会导致以下错误: " 引发错误类,错误值 _mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的 ':2013.12.21 (name CHAR(40))' 附近使用的正确语法")

我很确定这可能与字符转义或我的 sql 查询的定义方式有关,但后来进行了大量的谷歌搜索和 REPL 会话,我都没有设法修复它。

来自 REPL 的一些代码:

vendor = "vendorname"
curDate = time.strftime('%Y-%m-%d').replace("-", ".")
tableName = vendor + ":" + curDate
sql = "CREATE TABLE %s (name CHAR(40))" %tableName
sql
'CREATE TABLE vendorname:2013.12.21 (name CHAR(40))'

最后一点,如果您只分配 %tableName a-z 字符,这将非常有效。感谢您阅读并道歉,如果这是我错过的显而易见的事情!

【问题讨论】:

  • 为什么time.strftime('%Y-%m-%d').replace("-", ".") 不是time.strftime('%Y.%m.%d')
  • 我最初使用 datetime.now().date() 然后将其转换为字符串,但 SO 帖子使用 time.strftime('%Y-%m-%d') 和它似乎是一种更好的做事方式。
  • 您可以更改格式字符串以提供您需要的格式,而无需任何replace:docs.python.org/2/library/time.html#time.strftime
  • 我已经收藏了,谢谢:)!

标签: python scrapy mysql-python


【解决方案1】:

根据MySQL documentation

数据库和表名不能包含“/”、“\”、“.”或文件名中不允许的字符。

试试:

curDate = time.strftime('%Y%m%d')
tableName = "%s_%s" % (vendor, curDate)

例如,"vendorname_20131221"

【讨论】:

  • 我尝试完全删除这些字符,但仍然遇到同样的问题。不过我会再试一次!
  • 漂亮,成功了!谢谢你:D!。看来我需要阅读更多关于字符串的内容!
猜你喜欢
  • 1970-01-01
  • 2012-12-25
  • 2015-08-22
  • 2017-01-27
  • 2014-11-12
  • 2020-05-21
  • 2015-11-14
  • 2014-11-09
  • 2016-08-03
相关资源
最近更新 更多