Поскольку вам нужно присоединиться к dirname
с помощью x
, os.listdir()
просто перечисляет содержимое напрямую, содержимое не имеет полного пути.
Пример -
[x for x in os.listdir('dirname') if os.path.isfile(os.path.join('dirname',x))]
Когда полный путь не указан, os.path.isfile()
выполняет поиск в текущем каталоге, поэтому, когда вы даете '.'
на os.listdir()
, вы получаете правильный список назад.
Пример -
Допустим, что в некоторой папке /a/b/c
есть файлы - x
и y
.
, когда вы делаете - os.listdir('/a/b/c')
, возвращаемый список выглядит как -
['x','y']
Даже если вы укажете абсолютный путь внутри os.listdir()
, файлы, возвращенные в списке, будут иметь относительный путь к директории. Вам нужно вручную подключиться к dir и x
, чтобы получить правильные результаты.
В вашем третьем примере это не работает, потому что os.path.abspath()
также работает с текущим каталогом, поэтому, если вы это сделаете что-то вроде -
os.path.abspath('somefile')
Полученный результат будет - /path/to/current/directory/somefile
- он не проверяет, является ли это реальным файлом / dir или нет.
documentation (Emphasis mine) -
os.path.abspath (path)
Возвращает нормированную абсолютизированную версию пути пути. На большинстве платформ это эквивалентно вызову функции normpath () следующим образом:
blockquote>normpath(join(os.getcwd(), path))
., где
os.getcwd()
возвращает путь к текущему рабочему каталогу.
пользователь базы данных не имеет права на выполнение запроса select.
вы можете предоставить разрешение пользователю, если у вас есть root-доступ к mysql
http: / /dev.mysql.com/doc/refman/5.1/en/grant.html
Второй запрос относится к другой базе данных в другой таблице.
String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";
И пользователь, с которым вы подключаетесь, не имеет права доступа к данным из этой базы данных или этой конкретной таблицы.
Считаете ли вы эту вещь?
У меня была та же проблема. Это связано с спящим режимом. Я изменил базу данных с dev на производство в файле hibernate.cfg.xml, но в других файлах hbm.xml со старым именем базы данных был атрибут каталога, и это вызывало проблему.
Вместо того, чтобы сообщать неправильное имя базы данных, она обнаружила ошибку, разрешенную Permission.
Поэтому не забудьте изменить имя базы данных всюду или просто удалить атрибут каталога
Вам необходимо предоставить разрешения SELECT для пользователя MySQL, который подключается к MySQL. См .:
http://dev.mysql.com/doc/refman/5.0/en/privilege-system.html
http : //dev.mysql.com/doc/refman/5.0/en/user-account-management.html
У меня была та же проблема. Я был очень расстроен этим. Возможно, это не отвечает на вопрос, но я просто хочу поделиться своим опытом с ошибками, и могут быть другие, которые страдали, как я. Очевидно, это была моя низкая точность.
У меня было это:
SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
SELECT username,email FROM t_un
) a
ON t_comment.username,a.email
, который должен быть таким:
SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
SELECT username,email FROM t_un
) a
ON t_comment.username=a.username
Тогда моя проблема был разрешен в этот день, я боролся через два часа, только для этого вопроса.
ON
исправлено ,a.email
до =a.username
)
– Doug_Ivison
14 June 2016 в 13:31
Эта проблема произошла со мной, потому что у меня был hibernate.default_schema
установлен в другую базу данных, чем та, что в DataSource.
Будучи строгим в моих разрешениях пользователя mysql, когда hibernate пытался запросить таблицу, запросил ту, которая была в базе данных hibernate.default_schema
, для которой у пользователя не было разрешений.
. К сожалению, mysql неправильно указывает базу данных в этом сообщении об ошибке, так как это сразу прояснило бы ситуацию.
Немного поздно, но если у вас есть root-доступ, вы можете сделать следующее напрямую:
Войдите в свой mysql как root,
$ mysql -u root -p
Показать базы данных ;
mysql>SHOW DATABASES;
Выберите базу данных mysql, в которой находится информация о всех привилегиях.
mysql>USE mysql;
Показать таблицы.
mysql>SHOW TABLES;
Таблица о привилегиях для вашего случая это «db», поэтому давайте посмотрим, какие у него есть столбцы:
mysql>DESC db;
Чтобы перечислить права пользователей, введите следующую команду, например:
mysql>SELECT user, host, db, Select_priv, Insert_priv, Update_priv, Delete_priv FROM db ORDER BY user, db;
Если вы не можете найти этого пользователя или если вы видите, что у этого пользователя есть «N» в столбце Select_priv, вам необходимо либо ВСТАВИТЬ, либо ОБНОВИТЬ соответственно:
INSERT:
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv) VALUES ('localhost','DBname','UserName','Y' ,'N','N','N');
UPDATE:
UPDATE db SET Select_priv = 'Y' WHERE User = 'UserName' AND Db = 'DBname' AND Host='localhost';
Наконец, введите следующую команду:
mysql>FLUSH PRIVILEGES;
Ciao.
Я уверен, что проблема с оригинальным плакатом давно решена. Тем не менее, у меня была такая же проблема, поэтому я подумал, что объясню, что вызвало эту проблему для меня.
Я делал запрос объединения с двумя таблицами - «foo» и «foo_bar». Однако в моей инструкции SQL у меня была опечатка: «foo.bar»
Итак, вместо того, чтобы сообщать мне, что таблица «foo.bar» не существует, сообщение об ошибке указывает, что команда было отклонено - как будто у меня нет разрешений.
Надеюсь, это кому-то поможет.
dbo.
не работал в базе данных MySQL: когда dbo.tablename
был изменен на tablename
, он выполняется без ошибок.
– Doug_Ivison
14 June 2016 в 13:35
Проблема, скорее всего, между a. и _. Скажем, в моем запросе я положил
SELECT ..... FROM LOCATION.PT
вместо
SELECT ..... FROM LOCATION_PT
Итак, я думаю, что MySQL будет думать, что LOCATION является именем базы данных и дает прав доступа к привилегии.
Как и другие ответы, я пропустил запрос.
У меня было -
SELECT t.id FROM t.table LEFT JOIN table2 AS t2 ON t.id = t2.table_id
Должно быть
SELECT t.id FROM table AS t LEFT JOIN table2 AS t2 ON t.id = t2.table_id
Mysql пытался найти базу данных с именем t, для которой у пользователя не было разрешения.
У меня было то же сообщение об ошибке, выполняющее экспорт базы данных через Sequel Pro на mac. Я был пользователем root, поэтому я знал, что это не разрешения. Затем я попробовал его с mysqldump и получил другое сообщение об ошибке: Получил ошибку: 1449: Пользователь, указанный как определитель ('joey'@'127.0.0.1'), не существует при использовании LOCK TABLES
Ahh, я восстановил эту базу данных из резервной копии на сайте dev, и я не создал этого пользователя на этом компьютере. «предоставить все на . на« joey'@'127.0.0.1 », идентифицированный« joeypass »;» сделал трюк.
hth
команда select, запрещенная пользователю '' @ '' для таблицы ''
blockquote>Эта проблема является по существу сгенерированной после условия соединения неправильным именем базы данных в вашем запросе соединения. Поэтому, пожалуйста, проверьте ваш запрос выбора в имени таблицы соединений после базы данных.
Затем разрешите его, например, его правильную ans ware
string g = " SELECT `emptable`.`image` , `applyleave`.`id` , `applyleave`.`empid` , `applyleave`.`empname` , `applyleave`.`dateapply` , `applyleave`.`leavename` , `applyleave`.`fromdate` , `applyleave`.`todate` , `applyleave`.`resion` , `applyleave`.`contact` , `applyleave`.`leavestatus` , `applyleave`.`username` , `applyleave`.`noday` FROM `DataEMP_ems`.`applyleave` INNER JOIN `DataEMP_ems`.`emptable` ON ( `applyleave`.`empid` = `emptable`.`empid` ) WHERE ( `applyleave`.`leavestatus` = 'panding' ) ";
Таблица соединений
imputable
иapplyleave
в той же базе данных, но имя онлайн-базы данных отличается от заданной ошибки по этой проблеме.
, если вы работаете в приложении Windows Forms, это сработало для меня «server = localhost; user id = dbuser; password = password; database = dbname; Use Procedure Bodies = false;»
просто добавить в конце строки коннекта введите «Use Procedure Bodies = false».