PostgreSQL с SQLAlchemy не позволяет пустые записи - PullRequest
0 голосов
/ 20 апреля 2020

Я потратил много времени, пытаясь выяснить это, но просто не могу ничего найти. Я хочу разрешить пустые записи в моей базе данных, так как не все поля обязательны для заполнения и то, что необходимо , будет меняться в зависимости от ввода. Я думал, что пустые записи могут быть пустыми ...

Это ошибка, которую я получаю. Обратите внимание, что значения - это просто фиктивные значения, которые я вставил, и они не имеют значения В списке значений в ошибке есть небольшая морковь, указывающая на пустое '' после '133' как проблему:

(psycopg2.errors.InvalidTextRepresentation) неверный синтаксис ввода для типа real: "" LINE 1: ... mit_date) VALUES ('3645', '654', 'Change', '133', '', '0', '...

Вот код, который у меня есть:

Настой + SQLAlchemy:

class Request_Table(db.Model):
  __tablename__ = 'request_table'

  id = db.Column('id',db.Integer, primary_key=True)
  serial_num = db.Column('serial_num', db.String(10), nullable=False)
  meter_reading = db.Column('meter_reading', db.Float(5), nullable=False)
  request_type = db.Column('request_type', db.String(10), nullable=False)
  second_feet = db.Column('second_feet', db.Float(5), nullable=True)
  change_from = db.Column('change_from', db.Float(5), nullable=True)
  change_to = db.Column('change_to', db.Float(5), nullable=True)
  form_date = db.Column('form_date', db.String(10), nullable=False)
  laterals = db.Column('laterals', db.String(10), nullable=False)
  turnout = db.Column('turnout', db.String(10), nullable=True)
  remarks = db.Column('remarks', db.String(200), nullable=True)
  name = db.Column('name', db.String(20), nullable=True)
  submit_date = db.Column('submit_date', db.DateTime, default=datetime.utcnow)

  # Might not be needed but makes sense that it should be here.
  def __init__(self, id, serial_num : str = None, meter_reading : float = None, request_type : str = None, second_feet : float = None, change_from : float = None, change_to : float = None, form_date : str = None, laterals : str = None, turnout : str = None, remarks : str = None, name : str = None, submit_date : str = None):
    self.id = id
    self.serial_num = serial_num
    self.meter_reading = meter_reading
    self.request_type = request_type
    self.second_feet = second_feet
    self.change_from = change_from
    self.change_to = change_to
    self.form_date = form_date
    self.laterals = laterals
    self.turnout = turnout
    self.remarks = remarks
    self.name = name
    self.submit_date = submit_date

  # this is what gets returned when an entry is made
  def __repr__(self):
    return 'Success, I guess?'

И вот что PGAdmin говорит, что код для таблицы:

CREATE TABLE public.request_table
(
  id integer NOT NULL DEFAULT nextval('request_table_id_seq'::regclass),
  serial_num character varying(10) NOT NULL,
  meter_reading real NOT NULL,
  request_type character varying(10) NOT NULL,
  second_feet real,
  change_from real,
  change_to real,
  form_date character varying(10) NOT NULL,
  laterals character varying(10) NOT NULL,
  turnout character varying(10),
  remarks character varying(200),
  name character varying(20),
  submit_date timestamp without time zone,
  CONSTRAINT request_table_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);

Кажется, что поля, которые я указал как nullable должен допускать отсутствие записи, но когда я пытаюсь это сделать, это не получается. Я работаю только тогда, когда я заполняю все поля. Что я делаю не так? Кроме того, если кто-то видит действительно глупое форматирование с моей стороны (это моя первая попытка создания базы данных вещи), дайте мне знать, и я это исправлю.

1 Ответ

0 голосов
/ 22 апреля 2020

Проблема на самом деле заключается в том, что вы пытаетесь вставить значение типа String (Varchar) в поле типа Float (Real)

Попробуйте:

INSERT INTO request_table
(serial_num, meter_reading, request_type, form_date, laterals, submit_date)
VALUES
("12345", 10.0, "POST", "2019-01-01", "Something", "2020-01-01");

или это:

Request_Table(
  id=123,
  serial_num='12345',
  meter_reading=10.0,
  request_type='Change',
  form_date='2019-01-01',
  laterals='something',
  submit_date='2020-01-01'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...