pg8000 при создании таблицы путает имя столбца с типом - PullRequest
0 голосов
/ 01 октября 2019

Я использую pg8000 для Postgres API в моем пакете Python. Я создал функцию для создания таблицы, если такой таблицы не существует. Ниже приведена функция:

    def create_tables(self, cur, tables):

       for i, table in enumerate(tables):
            name = 'important_' + table
            query = '''CREATE TABLE IF NOT EXISTS {} (
                        {}  CHAR(9),
                        {}  DATE,
                        {}  DECIMAL,
                        {}  TIME,
                        {}  TIME,
                        {}  NUMERIC,
                        {}  CHAR,
                        {}  CHAR,
                        {}  DECIMAL 
                    )
                '''.format(name, "key", "date", "cycle_sequence", "sent_time","processed_time", "amount", "sender", "receiver", "jumbo")

            cur.execute(query)

Запрос выполняется без ошибок (в программе и онлайн-скрипте здесь ), за исключением того, что имена столбцов таблицы, например, следующие: "ключ CHAR (9)"," дата ДАТА "и т. д. Таким образом, запрос выполняется, но не распознает синтаксис. Но синтаксис запроса правильный согласно this . Любые советы?

ПРИМЕЧАНИЕ 1. Здесь есть похожий вопрос , но у меня нет схожих симптомов, потому что у меня нет синтаксической ошибки. Мой запрос выполнен успешно.

1 Ответ

0 голосов
/ 02 октября 2019

Это кажется мне странным, но «исправление» заключалось в том, чтобы убрать пробел перед знаком «(» в части спецификации столбца запроса, как показано ниже. С пробелом кортежи (имя, тип) интерпретируются как одна строкабез пробела они правильно интерпретируются как имя и тип столбца.

query = '''CREATE TABLE IF NOT EXISTS {} (...

query = '''CREATE TABLE IF NOT EXISTS {}(...

Для записи, которую я использую: PyCharm 2019.2.3 (Community Edition) с Anaconda 1.9.7. Пакет pg8000.

...