Использование org.apache.commons.io.FileUtils
File file = new File("F:/Lines");
Collection<File> files = FileUtils.listFiles(file, null, true);
for(File file2 : files){
System.out.println(file2.getName());
}
Используйте false, если вы не хотите файлы из подкаталогов.
Я смог выйти %
при помощи %%
в КАК операнд.
sql_query = "select * from mytable where website like '%%.com'"
cursor.fetchall(sql_query)
Если Вы будете использовать подготовленный оператор, то вход будет перенесен в ''
для предотвращения внедрения SQL. Здорово, но также и предотвращает вход + sql конкатенация.
лучший и самый безопасный путь вокруг этого состоял бы в том, чтобы передать в %
(s) как часть входа.
cursor.execute('SELECT * FROM goats WHERE name LIKE %(name)s', { 'name': '%name%'.format(name)})
Не найдя до сих пор встроенной функции, я написал довольно простую:
def escape_sql_like(s):
return s.replace('\\', '\\\\').replace('%', '\\%').replace('_', '\\_')
Да, это настоящий беспорядок. Как MySQL, так и PostgreSQL используют обратную челку - выскакивает для этого по умолчанию. Это ужасная боль, если вы также снова убегаете на строку с обратной червой ячейками вместо использования параметризации, и она также неверна в соответствии с ANSI SQL: 1992, в котором говорится, что есть по умолчанию никаких дополнительных escape символов в верхней части обычной строки, а также Следовательно, никаких способов включать буквальный %
или _
.
Я бы предположил бы, что простая обратная кожа - это метод замены также идет не так, если вы выключите обратную косалку - ускоры (которые сами не соответствуют ANSI SQL), используя NO_BACKSLASH_ESCAPE
SQL_MODE в MySQL или Standard_conforming_Strings
Conf в PostgreSQL (который PostgreSQL Devs угрожает сделать для пары версий сейчас).
Единственное реальное решение состоит в том, чтобы использовать малоизвестен , как синтаксис
, чтобы указать явный escape символ для , как
-Pattern. Это привыкла вместо обратной косоискателя в MySQL и PostgreSQL, заставляя их соответствовать тому, что все остальные делают и предоставляют гарантированный способ включить неполосные символы. Например, с подписанием =
= в качестве побега:
# look for term anywhere within title
term= term.replace('=', '==').replace('%', '=%').replace('_', '=_')
sql= "SELECT * FROM things WHERE description LIKE %(like)s ESCAPE '='"
cursor.execute(sql, dict(like= '%'+term+'%'))
Это работает на PostgreSQL, MySQL и ANSI SQL-совместимых базах данных (модуль параметров, конечно, меняется на разных модулях БД).
Возможно, может быть проблема с MS SQL Server / Sybase, которая, по-видимому, также позволяет [A-Z]
группы символов -лей в , как
выражения. В этом случае вы хотели бы также избежать буквального характера [
с .replace ('[', '= [')
. Однако в соответствии с ANSI SQL избегает персонажа, который не нуждается в сборе, недействителен! (Argh!) Итак, это, вероятно, все равно будет работать через настоящие СУБД, вы все равно не будете соответствовать Ansi. вздох ...
Вы можете создать подкласс класса Like
, подкласс str
и зарегистрировать адаптер для it , чтобы преобразовать его в правильном синтаксисе (например, используя escape_sql_like ()
, который вы написали).
Интересно, действительно ли все вышеперечисленное необходимо? Я использую psycopg2 и просто смог использовать:
data_dict['like'] = psycopg2.Binary('%'+ match_string +'%')
cursor.execute("SELECT * FROM some_table WHERE description ILIKE %(like)s;", data_dict)