MySQLdb - 使用Python中的datetime模块命名表

时间:2013-12-21 22:42:14

标签: python scrapy mysql-python

我在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(名称CHAR(40))附近的正确语法' “)

我很确定它可能与字符转义或我的sql查询的定义方式有关,但后来很多Googling和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字符,这将完美地运行。感谢阅读和道歉,如果这是我错过的令人眼花缭乱的事情!

1 个答案:

答案 0 :(得分:1)

根据MySQL documentation

  

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

尝试:

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

例如,"vendorname_20131221"