Строковые литералы и символы ESC в postgresql

df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split(),
                   'C': np.arange(8), 'D': np.arange(8) * 2})
df[df['A']=='foo']

OUTPUT:
   A      B  C   D
0  foo    one  0   0
2  foo    two  2   4
4  foo    two  4   8
6  foo    one  6  12
7  foo  three  7  14
104
задан Damjan Pavlica 2 January 2015 в 22:34
поделиться

5 ответов

Частично. Текст вставляется, но предупреждение все еще сгенерировано.

я нашел обсуждение, которое указало, что тексту нужно было предшествовать с 'E', как таковым:

insert into EscapeTest (text) values (E'This is the first part \n And this is the second');

Это подавило предупреждение, но текст все еще не возвращался правильно. Когда я добавил дополнительную наклонную черту как предложенный Michael, она работала.

Как таковой:

insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
120
ответ дан rjohnston 24 November 2019 в 04:11
поделиться

Прохладный.

я также нашел документацию относительно E:

http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

PostgreSQL также принимает строковые константы "Escape", которые являются расширением стандарта SQL. Строковая константа Escape определяется путем записи буквы E (верхний регистр или нижний регистр) незадолго до вводной одинарной кавычки, например, E'foo'. (При продолжении строковой константы Escape через строки запишите E только перед первой вводной кавычкой.) В строке Escape символ обратной косой черты (\) начинает подобную C escape-последовательность обратной косой черты, в которой комбинация обратной косой черты и после символа (символов) представляет специальное значение байта. \b является клавишей Backspace, \f является переводом формата, \n является новой строкой, \r является возвратом каретки, \t является вкладкой. Также поддерживаемый \digits, где цифры представляют восьмеричное значение байта и \xhexdigits, где hexdigits представляет шестнадцатеричное значение байта. (Это - Ваша ответственность, что последовательности байта, которые Вы создаете, являются допустимыми символами в кодировании набора символов сервера.) Любой другой символ после обратной косой черты взят буквально. Таким образом, для включения символа обратной косой черты запишите две обратных косых черты (\\). Кроме того, одинарная кавычка может быть включена в строку Escape путем записи \', в дополнение к нормальному способу' '.

37
ответ дан Michael Stum 24 November 2019 в 04:11
поделиться

Я нахожу, что он очень вряд ли для Пост-ГРЭС усекает Ваши данные по входу - это или отклоняет его или хранит его, как.

milen@dev:~$ psql
Welcome to psql 8.2.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

milen=> create table EscapeTest (text varchar(50));
CREATE TABLE
milen=> insert into EscapeTest (text) values ('This will be inserted \n This will not be');
WARNING:  nonstandard use of escape in a string literal
LINE 1: insert into EscapeTest (text) values ('This will be inserted...
                                              ^
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
INSERT 0 1
milen=> select * from EscapeTest;
          text
------------------------
 This will be inserted
  This will not be
(1 row)

milen=>
3
ответ дан Milen A. Radev 24 November 2019 в 04:11
поделиться

Действительно глупый вопрос: действительно ли Вы уверены, что строка является усеченной, и не только поврежденная в разрыве строки, который Вы определяете (и возможно не показывающий в Вашем интерфейсе)? Т.е., Вы ожидаете, что поле покажет

, Это будет вставлено \n, которым Это не будет

, или

Это будет вставлено

, Это не будет

кроме того, какой интерфейс Вы используете? Действительно ли возможно, что что-то по пути ест Ваши обратные косые черты?

2
ответ дан 24 November 2019 в 04:11
поделиться

Предупреждение выдается, поскольку вы используете обратную косую черту в своих строках. Если вы хотите избежать этого сообщения, введите команду «set standard_conforming_strings = on;». Затем используйте "E" перед строкой, включая обратную косую черту, которую postgresql должен интерпретировать.

6
ответ дан 24 November 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: