无法对字符串上的 python 执行 Mysql 查询,因为 backtick/grave 导致冲突
Cant execute Mysql query on python that is on a string because backtick/grave cause conflict
我有这个查询:
CREATE TABLE IF NOT EXISTS `configuration` (
`key` varchar(128) NOT NULL,
`value` varchar(1024) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
它在 workbench 和在线 mysql 解释器上正确执行,我有一个 python 程序,当它执行相同的查询时它会启动语法错误。查询是在这样格式化的字符串上进行的:
Query = """
CREATE TABLE IF NOT EXISTS `configuration` (
`key` varchar(128) NOT NULL,
`value` varchar(1024) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
之前我遇到过同样的问题:
CREATE TABLE IF NOT EXISTS `logs` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`order_id` int(11) NULL,
`level` int(11) NOT NULL,
`source` varchar(100) NOT NULL,
`message` text NOT NULL,
`detail` longtext NULL,
PRIMARY KEY (`id`),
KEY `idx_logs_timestamp` (`timestamp` DESC),
KEY `idx_logs_level` (`level`),
KEY `idx_logs_order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
删除反引号“`”后,查询工作正常。但是,如果我从第一个查询中删除反引号,语法错误仍然存在。
这是我在 python 上执行查询时使用的代码:
def Execute_Query_On_Database(database,query):
server_database= config.Read_Property("DATABASES","Server_Database")
user= config.Read_Property("SSH","SSH_Username")
password= config.Read_Property("SSH","SSH_Password")
operation= "mysql -u "+user+" -h "+server_database+" -p "+database+" --password="+password+" -e \""+query+"\""
result= ssh.execute_ssh_command(operation)
return result
print (Execute_Query_On_Database("database_default",Query))
所以我最终使用 pyMySQL 来 运行 一个带有查询的 SQL 文件。找不到导致查询在代码上失败的原因。
我有这个查询:
CREATE TABLE IF NOT EXISTS `configuration` (
`key` varchar(128) NOT NULL,
`value` varchar(1024) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
它在 workbench 和在线 mysql 解释器上正确执行,我有一个 python 程序,当它执行相同的查询时它会启动语法错误。查询是在这样格式化的字符串上进行的:
Query = """
CREATE TABLE IF NOT EXISTS `configuration` (
`key` varchar(128) NOT NULL,
`value` varchar(1024) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
之前我遇到过同样的问题:
CREATE TABLE IF NOT EXISTS `logs` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`order_id` int(11) NULL,
`level` int(11) NOT NULL,
`source` varchar(100) NOT NULL,
`message` text NOT NULL,
`detail` longtext NULL,
PRIMARY KEY (`id`),
KEY `idx_logs_timestamp` (`timestamp` DESC),
KEY `idx_logs_level` (`level`),
KEY `idx_logs_order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
删除反引号“`”后,查询工作正常。但是,如果我从第一个查询中删除反引号,语法错误仍然存在。
这是我在 python 上执行查询时使用的代码:
def Execute_Query_On_Database(database,query):
server_database= config.Read_Property("DATABASES","Server_Database")
user= config.Read_Property("SSH","SSH_Username")
password= config.Read_Property("SSH","SSH_Password")
operation= "mysql -u "+user+" -h "+server_database+" -p "+database+" --password="+password+" -e \""+query+"\""
result= ssh.execute_ssh_command(operation)
return result
print (Execute_Query_On_Database("database_default",Query))
所以我最终使用 pyMySQL 来 运行 一个带有查询的 SQL 文件。找不到导致查询在代码上失败的原因。