我在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字符,这将完美地运行。感谢阅读和道歉,如果这是我错过的令人眼花缭乱的事情!
答案 0 :(得分:1)
数据库和表名称不能包含“/”,“\”,“。”或文件名中不允许的字符。
尝试:
curDate = time.strftime('%Y%m%d')
tableName = "%s_%s" % (vendor, curDate)
例如,"vendorname_20131221"