Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用ALTER TABLE添加yy mm dd列时出现“语法错误”_Python_Sql_Pyodbc - Fatal编程技术网

Python 使用ALTER TABLE添加yy mm dd列时出现“语法错误”

Python 使用ALTER TABLE添加yy mm dd列时出现“语法错误”,python,sql,pyodbc,Python,Sql,Pyodbc,这是我的密码: val = str(datetime.datetime.now().strftime("%y-%m-%d")) print(val) def export(): cursor = conn.cursor() cursor.execute("ALTER TABLE TRACKER ADD %s INTEGER" % val) conn.commit() 当我运行代码时,它会打印17-02-14,但当我点击导出按钮时,我在“17”附近得到错误语法 添加列

这是我的密码:

val = str(datetime.datetime.now().strftime("%y-%m-%d"))
print(val)

def export():
    cursor = conn.cursor()
    cursor.execute("ALTER TABLE TRACKER ADD %s INTEGER" % val)

    conn.commit()
当我运行代码时,它会打印17-02-14,但当我点击导出按钮时,我在“17”附近得到错误语法


添加列的语法与其他变量配合得很好。只是日期不合适。我甚至将日期转换为字符串,但出于某种原因,这并没有解决问题。

您试图创建一个名称为17-02-15的列,但没有成功,因为需要引用包含空格或有趣字符的列名。下面的示例使用接受ANSI标准双引号列名的SQLite,但其他DBMS可能使用其他字符,例如,MySQL倾向于使用反引号'column name',Microsoft SQL Server通常使用方括号[column name]

测试代码:

导入日期时间 导入sqlite3 conn=sqlite3.connect':内存:' crsr=连接光标 sql='创建表跟踪器id INT主键' printsql crsr.executesql 康涅狄格州 已创建printTest表。 打印 val=strdatetime.datetime.now.strftime%y-%m-%d sql='ALTER TABLE TRACKER添加%s整数“%val” printsql 尝试: crsr.executesql 康涅狄格州 添加了打印列。 例外情况除外,例如: printreprex 打印 现在尝试在列名周围加引号 sql='ALTER TABLE TRACKER添加%s整数“%val” printsql 尝试: crsr.executesql 康涅狄格州 添加了打印列。 例外情况除外,例如: printreprex 打印 sql='SELECT*FROM TRACKER' crsr.executesql 打印当前列名: 在crsr.description中为x打印[x[0] crsr.close 康涅狄格州 控制台输出:

创建表跟踪器id INT主键 已创建测试表。 ALTER TABLE TRACKER添加17-02-15整数 操作错误“接近17:语法错误”, ALTER TABLE TRACKER添加17-02-15整数 增加了一列。 当前列名: ['id','17-02-15']
另请注意,不同的DBMS可能对列名有其他限制,例如,有些DBMS可能坚持列名不能以数字开头。

是否确实要创建名为17-02-14的列?或者列名应该是“timestamp”或类似的名称?这个错误是因为SQL表名不能有带有正确转义字符的连字符,除非您绝对需要它,否则这会带来麻烦。啊,我不知道。我希望列标题是日期,以便将来可以参考它。这样做的好方法是什么?可以使用下划线而不是连字符。或者,使用yyyymmdd格式作为列名。将列标题作为特定日期的用例是什么。我还没有见过任何这样设计的DB模式,因为每24小时您就会有一个新的日期,并且您的表将在短时间内用完列。或者至少变得难以管理。我建议在DB表中添加一个“date”列,并针对它添加行。如果列数不同,像MongoDB这样的NOSQL数据库也可能是一个不错的选择。我猜使用全整数列名可能有限制。1.你能尝试添加一个字母作为前缀吗?比如d_20141217?2.你能试着用双引号20141217括住列名吗?太好了。我试过用``和,但从来没有用方括号。这很好用。