MySQLdb - Таблицы именования с использованием модуля datetime в Python

Я использую модуль MySQLdb в Python для создания таблицы, но я столкнулся с некоторыми проблемами при попытке назвать его с помощью модуля 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)

Это приводит к следующей ошибке: "повысить errorclass, errorvalue _mysql_exceptions.ProgrammingError: (1064, " У вас есть ошибка в синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MySQL, на предмет правильного синтаксиса, который будет использоваться рядом ":2013.12.21 (название CHAR(40))'в строке 1")

Я почти уверен, что это может быть связано с экранированием символов или определением моего 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 az символов. Спасибо за чтение и извинения, если это что-то ослепительно очевидно, я пропустил!

1 ответ

Решение

According to the MySQL documentation:

Имена базы данных и таблицы не могут содержать символы "/", "\", "." Или символы, которые не допускаются в именах файлов.

Пытаться:

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

Например, "vendorname_20131221"

Другие вопросы по тегам