-
2021-01-19 10:12:38
我有一个名为project1的数据库,其中包含以下表格:
_systbl1
_systbl2
_systbl3
dataset1
dataset2
dataset3
每当添加一个新用户时,都需要授予MySQL用户odbc对dataset%表的SELECT权限.
为此,我使用了一个简单的python脚本,如下所示:
#!/usr/bin/python
import MySQLdb
db = MySQLdb.connect(
host="localhost",
user="user",
passwd="pass",
db="project1"
)
# Create Cursor Object
cur = db.cursor()
# get list of tables beginning with dataset
cur.execute("SHOW TABLES FROM project1 LIKE 'dataset%';")
# run GRANT statement for each table
for row in cur.fetchall() :
cur.execute("GRANT SELECT ON `project1`.`%s` TO `odbc`@`localhost`;", row)
cur.execute("GRANT SELECT ON `project1`.`%s` TO `odbc`@`%`;", row)
不幸的是,它给了我以下错误:
Traceback (most recent call last):
File "mysql_query.py", line 20, in
cur.execute("GRANT SELECT ON `project1`.`%s` TO `odbc`@`localhost`;", row)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1146, "Table 'project1.'dataset1'' doesn't exist")
正如您在错误的最后一行中看到的那样,问题在于python在生成查询时在表名周围加上了单引号.
我在这里想念什么?
更多相关内容 -
mysql双引号表名
2021-07-16 17:01:02I'm doing a mysql query like:Select * from "User";and it returns: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 '...I'm doing a mysql query like:
Select * from "User";
and it returns:
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 '"User"' at line 1
The error has something to do with the double-quotes ", can I keep the select statement as is, and make mysql cope with the double quotes?
解决方案
Taken from this post:
SET GLOBAL SQL_MODE=ANSI_QUOTES;
Personally when I tested, I had to do it like this:
SET SQL_MODE=ANSI_QUOTES;
I don't think there's any other way.
ANSI_QUOTES
Treat “"” as an identifier quote character (like the “`” quote
character) and not as a string quote character. You can still use “`”
to quote identifiers with this mode enabled. With ANSI_QUOTES enabled,
you cannot use double quotation marks to quote literal strings,
because it is interpreted as an identifier.
-
在数据库和表名周围使用单引号在MySQL中不起作用?
2021-01-26 02:07:51您需要对表名和数据库名使用反引号。语法如下:UPDATE`yourDatabaseName`.`yourTableName`SETyourColumnName1=yourColumnName1+1WHEREyourColumnName2=’yourValue’;为了理解上述语法,让我们创建一个表。创建表的...您需要对表名和数据库名使用反引号。语法如下:UPDATE `yourDatabaseName`.`yourTableName`
SET yourColumnName1=yourColumnName1+1
WHERE yourColumnName2=’yourValue’;
为了理解上述语法,让我们创建一个表。创建表的查询如下:mysql> use test;
Database changed
mysql> create table Add1Demo
-> (
-> Id varchar(10),
-> Value int
-> );
使用insert命令在表中插入一些记录。查询如下:mysql> insert into Add1Demo values('1',780);
mysql> insert into Add1Demo values('2',1001);
mysql> insert into Add1Demo values('3',1654);
mysql> insert into Add1Demo values('4',3999);
mysql> insert into Add1Demo values('5',5999);
mysql> insert into Add1Demo values('6',799);
mysql> insert into Add1Demo values('8',899);
使用select语句显示表中的所有记录。查询如下:mysql> select *from Add1Demo;
以下是输出:+------+-------+
| Id | Value |
+------+-------+
| 1 | 780 |
| 2 | 1001 |
| 3 | 1654 |
| 4 | 3999 |
| 5 | 5999 |
| 6 | 799 |
| 8 | 899 |
+------+-------+
7 rows in set (0.00 sec)
这是在数据库名称和表名称周围使用反引号的查询。不要对数据库和表名使用单引号。查询如下,假设将1添加到当前字段。mysql> update `test`.`Add1Demo`
-> set Value=Value+1
-> where Id='6';
Rows matched: 1 Changed: 1 Warnings: 0
现在,您可以再次检查具有特定ID 6的表记录。查询如下:mysql> select *from Add1Demo where Id='6';
以下是输出:+------+-------+
| Id | Value |
+------+-------+
| 6 | 800 |
+------+-------+
1 row in set (0.00 sec)
-
MYSQL表名.字段反引号问题
2022-02-17 23:11:53解析: 这里user别名是关键字,我们加上``,使用 表名.字段 应该各自给他们上反引号,像图中用法一样,而不是用反引号包括整体,同时还有一点注意,表使用别名之后,使用原表名引用字段会失效。 ...
解析:这里user别名是关键字,我们加上``,使用 表名.字段 应该各自给他们上反引号,像图中用法一样,而不是用反引号包括整体,同时还有一点注意,表使用别名之后,使用原表名引用字段会失效。
-
mysql表名与列名单引号引发的问题
2019-05-09 19:44:31mysql表名与列名单引号问题 当我建立如下表的时候报如下错: mysql> create table goods( -> goods_id mediumint(8) unsigned not null auto_increment, -> cat_id smallint(5) unsigned not null default ... -
mysql 表名不加单引号不能正常查询,插入,删除,等
2019-04-25 17:46:49原因:跟mysql的版本有关,如果表名是该版本的关键字,不加引号就会报错 解决办法:在该sql语句中给表名加引号。 -
为什么我必须在我的MySQL查询中使用表名周围的反引号?
2021-04-20 06:42:07据我所知,不需要反引号,例如查询中的表名:(“INSERT INTO table_name ….”).另外,据我所知,下划线是在名称中使用的完全可接受的语法:foo_bar.那么我的问题是,为什么这个查询失败了:mysql_query("INSERT INTO ... -
MySQL表名为关键字处理
2022-05-18 21:36:48MySQL误使用关键字命名处理 -
当表名“ match”没有用单引号引起来时,MySQL引发错误?
2021-01-26 23:43:54不要使用单引号。您需要在表名匹配周围使用反引号,因为它是MySQL中的保留名。以下是发生的错误:mysql>select*frommatch;ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;... -
mysql错误1064 mysql中引号的用法(反引号,单引号,双引号)
2021-06-03 14:36:130.mysql报错如下 错误代码: 1064 You have an error in your SQL syntax;...最常见的是因为表名或字段名添加了双引号或单引号,不加引号或者加反引号即可。 错误代码: 单引号 CREATE TABLE 'T_ROLE' ( 'ID' -
mysql表名和关键字冲突的时候怎么办
2019-10-16 13:57:17其实很简单,例如:order就是mysql的关键字,建表之后,写SQL语句,一直提示有语法错误, 其实很简单,只需要在表名上加一个引用符号即可,这个符号不是单引号,是在tab键上的一个符号,可以试一下 ... -
mysql别名引号与引用问题
2022-04-14 08:59:38mysql别名使用问题 本内容来源于官方文档 英文不错的同学可以直接到文档 https://dev.mysql.com/doc/refman/8.0/en/problems-with-alias.html ...-- 别名带引号 select did as "d",avg(salary) from t_employ -
我们可以在MySQL表名中加下划线吗?
2021-01-19 08:53:46您不能在表名称中添加...但是,让我们首先尝试在带下划线的表名周围设置引号。以下是一个例子-mysql>createtable'Demo_Table725'(ClientIdintNOTNULLAUTO_INCREMENTPRIMARYKEY,ClientNamevarchar(100),Client... -
Mysql数据库表名空格处理
2021-01-26 00:00:52Mysql数据库表名空格处理今天使用PowerDesigner搭建了一个小项目,最后执行完SQL脚本时才发现有2张表的表名中间多了一个空格,查完资料,最后并惊奇发现映射文件竟然多了2个`,就是shift+数字键1的那个,也就是他在... -
5.7部分版本mysql对双引号的表名和字段,执行不成功
2019-12-16 11:38:04主要是备份的sql语句在表名和字段上加了双引号““,5.7的有些版本默认不支持。 首先执行: SET SESSION SQL_MODE=ANSI_QUOTES; 然后再执行备份。 若不成功,可提取出备份文件的sql语句,单独修改执行 ... -
mysql—引号及concat() 使用
2022-04-22 13:40:581、MySQL中语句,“中文”表名或列明不一定都需要加引号''; 2、concat()函数注意事项 -
mysql 建表语句里的表名,字段名应该用单引号还是双引号
2021-01-04 09:39:51测试了都不对,要么表名和字段名都不用引号,要么就用反引号(在波浪线按钮上) 如下:创建user表: create table if not EXISTS user (id int UNSIGNED AUTO_INCREMENT, userName VARCHAR(100) NOT NULL, ... -
MySQL中反引号的用法
2022-04-05 12:09:00所谓的保留字就是select database insert 这一类数据库的sql指令,当我们不得已要拿他们来做表名和字段名的时候 我们必须要加反引号来避免编译器把这部分认为是保留字而产生错误。 例如:SELECT`select`FROM`test`... -
MySQL中单引号‘,双引号“和反引号`的区别
2021-03-15 15:34:09MySQL里引用字符串常量时需要用一对英文单引号“ ' ”或英文双引号“ " ”将字符串常量常量括起来。例如: 'an apple' "a book" 1.1 单引号 一般应使用英文单引号,如果字符串内需要包含单引号时,除了使用... -
mysql 表名和和数据库函数名称冲突的解决方法
2018-12-19 20:25:43解决核心:在表名上加上单引号。比如show—>‘show’,在mybatis中不可直接加’ '要用到转义字符。 好久没写blog了,今天刚考完网络后面还有一大段时间没考试可以学点技术了。但是,今天晚上被mysql卡了一晚上... -
mysql单引号和双引号
2021-01-18 19:45:13表名,列名最好用`(esc下面那个,不用`会出错)这就要从双引号和单引号的作用讲起:双引号里面的字段会经过编译器解释然后再当作HTML代码输出,但是单引号里面的不需要解释,直接输出。例如:$abc='I love u';echo $... -
MySQL中单引号,双引号和反引号的区别
2019-06-22 18:34:09MySQL里引用字符串常量时需要用一对英文单引号“ ' ”或英文双引号“ " ”将字符串常量常量括起来。例如: 'an apple' "a book" 1.1 单引号 一般应使用英文单引号,如果字符串内需要包含单引号时,除了使用转义... -
[数据库]mysql单引号和双引号的用法
2021-02-02 11:51:45[数据库]mysql单引号和双引号的用法02016-03-17 15:00:03表名,列名最好用`(esc下面那个,不用`会出错)这就要从双引号和单引号的作用讲起:双引号里面的字段会经过编译器解释然后再当作HTML代码输出,但是单引号里面... -
mysql的单引号,反引号,双引号
2021-01-19 21:33:05请留意这个单引号,该单引号不是中文 ‘ ’ ,也不是英文的 ’ ’其实这个不是单引号,而是反引号 (`) 这个符号(英文输入法下,数字键 1 左侧的那个按键)mysql中的 表名 和字段名使用的是反引号,解决名称冲突的... -
【MySQL】MySQL中建表时变量名最好加反引号
2021-11-21 15:16:32因此MySQL建表时对于表中涉及到的变量名,无论是否是内置数据类型,都需要添加反引号。注意这里是反引号,而不是单引号或双引号。反引号通过键盘ESC键下方的"~"按键可以输入(注意输入时切换成半角)。正确的SQL语句... -
mysql下解决动态表名
2018-07-19 14:17:03之前在编写一段sql,内容如下:show create table ?...经过研究,是jdbcTemplate在用表名替换占位符的时候,会自动在表名两边加上单引号,注意是单引号而不是~的那个点,~的那个点是没问题的,而单引号... -
在MySQL中可以使用下划线作为表名吗?
2021-01-28 08:27:14是的,我们可以在表名周围使用反引号将下划线添加为表名。以下是语法-INSERTINTO`yourTableName`values(yourValue1,.......N);让我们首先创建一个表-mysql>createtable`DemoTable_1`(IdintNOTNULLAUTO_... -
一文搞懂mysql单引号,双引号,反引号的使用
2020-03-26 09:42:56在mysql中引用字符串常量时候需要用一对英文单引号或者双引号。在一般使用的时候你会发现单引号和双引号没有什么区别。 但是在转义时,我们会使用到单双引号,例如你要查询的字段里面本身就带有单引号或者双引号时,... -
MySQL表名涉及关键字,用反引号引起来
2020-06-02 09:15:57create table `create` ( -> id int -> ); Query OK, 0 rows affected (0.03 sec) ... check the manual that corresponds to your MySQL server version for the right syntax to use nea.