创建 MySQL Table 时出现编程错误

Programming Error while creating MySQL Table

@我正在将用户的输入翻译成 MySQL 命令,但它说我的语法有误,不知道如何修复它。本质上,我在 python 中编写了一个程序(不是 python 代码的问题),它能够创建 MySQL tables 并将用户输入转换为 MySQL 命令来创建 table,但我认为我的命令措辞有误,需要有人帮助解释我做错了什么以及我如何修复它或其他方法(没有新的 python 包只是不同 MySQL 命令)。

#Error
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''c1', 'c2') VALUES [('r1', 'r2')]' at line 1

#here is what i was collecting in my attempt to fix the bug
'''
ROW SYNTAX: [('r1', 'r2')]
COLUMN SYNTAX: ('c1', 'c2')
MySQL COMMAND: CREATE TABLE test ('c1', 'c2') VALUES [('r1', 'r2')]
'''
#just the values none of the ROW SYNTAX or COLUMN SYNTAX is actually put into the mysql command

我期待它创建 table 具有:

2 列:c1 和 c2

1 行有 2 个值:r1 和 r2

然而,正如我在上面所解释的...它没有。我真的不使用 MySQL 只是 python 所以我可能遗漏了一些我不明白的非常简单或重要的东西。

我看过一些与此类似的示例语法,但我还是不明白。

更新

'''
ROW SYNTAX: [('r1', 'r3'), ('r2', 'r4')]
COLUMN SYNTAX TCOLN: (c1, c2)
COLUMN SYNTAX COLNAMES: (c1 VCHAR(255), c2 VCHAR(255))

CREATE TABLE COMMAND: CREATE TABLE test (c1 VCHAR(255), c2 VCHAR(255));
INSERT TABLE COMMAND: INSERT INTO test (c1, c2) VALUES [('r1', 'r3'), ('r2', 'r4')];
'''
'''
Traceback (most recent call last):
  line 472, in cmd_query
    raw_as_string=raw_as_string)
_mysql_connector.MySQLInterfaceError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VCHAR(255), c2 VCHAR(255))' at line 1

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  line 558, in ctable
    cursor.execute(sqlCol) #slqCol is CREATE TABLE test (c1 VCHAR(255), c2 VCHAR(255));
  line 266, in execute
    raw_as_string=self._raw_as_string)
  line 475, in cmd_query
    sqlstate=exc.sqlstate)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VCHAR(255), c2 VCHAR(255))' at line 1
'''

感谢您的建议,我现在正在使用 VARCHAR,但我似乎仍然 运行 接近同样的问题

感谢@Martin 解释了什么是 varchar,事实证明 VCHAR 与 VARCHAR 不同(感谢@robsiemb)。现在 table 正在创建但没有将数据值放入? (这可能是一个 python 问题,希望不是)

'''
INSERT TABLE COMMAND: INSERT INTO test (c1, c2) VALUES ('r1', 'r2'),('rr1', 'rr2');
'''

# LATEST UPDATE
New Error when inserting values
```python

#CREATE TABLE COMMAND: CREATE TABLE test (c1 VARCHAR(255), c2 VARCHAR(255));
#INSERT TABLE COMMAND: INSERT INTO test (c1, c2) VALUES (r1,r3),(r2,r4);

'''
Traceback (most recent call last):
  line 472, in cmd_query
    raw_as_string=raw_as_string)
_mysql_connector.MySQLInterfaceError: Unknown column 'r1' in 'field list'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  line 563, in ctable
    cursor.execute(sqlVal)
  line 266, in execute
    raw_as_string=self._raw_as_string)
  line 475, in cmd_query
    sqlstate=exc.sqlstate)
mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column 'r1' in 'field list'
'''

Python问题,感谢您回答我的问题!

你所做的问题在这个语句中:

CREATE TABLE test ('c1', 'c2') VALUES [('r1', 'r2')]

这不是有效的 CREATE TABLE 声明。

您似乎在尝试创建 table,然后向其中插入一些值。是这样吗?

如果是这样,这应该分成两个陈述。首先创建 table:

CREATE TABLE test (c1 DATATYPE, c2 DATATYPE);

DATATYPE 替换为您正在创建的列的类型(即 INTVARCHAR(10) 等)。

其次,将您的值插入 table:

INSERT INTO test (c1, c2) VALUES (r1, r2);

您应该查看 syntax and example 如何创建 MySQL table。

您的 CREATE TABLE 语句有 2 个问题。

  • 您需要指定列的类型,例如:
CREATE TABLE test (c1 INTEGER, c2 INTEGER);
INSERT INTO test (c1, c2) VALUES (1, 3),(2, 4);

上面给出了一个有两行的table,像这样:

mysql> SELECT * FROM test;
+------+------+
| c1   | c2   |
+------+------+
|    1 |    3 |
|    2 |    4 |
+------+------+