Внутренняя ошибка сервера Postgresql: отображается как ненулевое значениеPython

Программы на Python
Anonymous
Внутренняя ошибка сервера Postgresql: отображается как ненулевое значение

Сообщение Anonymous »

Я пытаюсь настроить почтовый запрос с помощью SQL Alchemy, где я могу обновлять записи в таблице пользователей. У меня возникла проблема, связанная с тем, что user_id нарушает ограничение non_null
Ошибка:

Код: Выделить всё

(pg8000.exceptions.DatabaseError) {'S': 'ERROR', 'V': 'ERROR', 'C': '23502', 'M': 'null value in column "id" of relation "User" violates not-null constraint', 'D': 'Failing row contains (null, string, string, string, string, string, CA, string, string, string, string, 0, Temp, Temp, Temp, t, 2024-06-24 11:55:55.40777, 2024-06-24 11:55:55.40777, t).', 's': 'public', 't': 'User', 'c': 'id', 'F': 'execMain.c', 'L': '2009', 'R': 'ExecConstraints'}
Изображение

Для контекста я установил связь «один ко многим» с таблицей состояний (в качестве родительской) и таблицей пользователей (в качестве дочерней). До установки связи база данных создавала новый user_id для каждой записи. После настройки этой связи я получаю эту ошибку.
вот мой соответствующий код
models.py

Код: Выделить всё

class State(Base):
__tablename__ = 'state'

state_code = Column(String(2), primary_key=True)
state_Name = Column(String(150), nullable=False)

#relationship
# user_id = Column(Integer, ForeignKey('User.user_ID'))
children = relationship("User", back_populates="parent")

class User(Base):
__tablename__ = 'User'

id = Column(Integer, primary_key=True)
### - UI
first_name = Column(String(50))
last_name = Column(String(50))
address_line_1 = Column(String(100))
address_line_2 = Column(String(100))
city = Column(String(50))

zip = Column(String(10))
login_name = Column(String(100))
email = Column(String(100), nullable=False)
mobile_phone_num = Column(String(15))
grade_level = Column(Integer)
has_adhd = Column(Boolean)
### - UI

### - Google Auth
google_id = Column(String(100))
google_name = Column(String(100))
google_profile_url = Column(String(255))

is_active = Column(Boolean, nullable=False) #Default is True
creation_date = Column(DateTime, nullable=False) # Current date user logs in, hardcoded
last_update_date = Column(DateTime, nullable=False) # Current date user logs off, hardcoded

#Relationships
state_code = Column(String(2), ForeignKey('state.state_code'))
parent = relationship("State", back_populates="children")
main.py

Код: Выделить всё

##Schema##
class StateBase(BaseModel):
state_name: str
class UserBase(BaseModel):
first_name: str
last_name: str
address_line_1: str
address_line_2: str
city: str
state_code: str
zip: str
login_name: str
email: str
mobile_phone_num: str
grade_level: int
has_adhd: bool

google_id: str
google_name: str
google_profile_url: str

is_active: bool
creation_date: datetime
last_update_date: datetime

## Cognifin
@app.post("/State")
async def create_state(state:StateBase, db: db_dependency):
db_state = models.State(
State_name = state.State_name
)
db.add(db_state)
db.commit()
db.refresh(db_state)

@app.post("/User")
async def create_user(user:UserBase, db: db_dependency):

db_user = models.User(
##UI Elements
first_name = user.first_name,
last_name = user.last_name,
address_line_1 = user.address_line_1,
address_line_2 = user.address_line_2,
city = user.city,
state_code = user.state_code,
zip = user.zip,
login_name = user.login_name,
email = user.email,
mobile_phone_num = user.mobile_phone_num,
grade_level = user.grade_level,
has_adhd = user.has_adhd,

### - Google Auth
google_id = "Temp",
google_name = "Temp",
google_profile_url = "Temp",
##UI backend
is_active = True,
creation_date = datetime.now(),
#DDBL CHECK WITH KRISHNA
last_update_date = datetime.now()
)
db.add(db_user)
db.commit()
db.refresh(db_user)
Я думаю, что причина проблемы «id» является основной, поэтому я попробовал установить для Nullable значение True:

Код: Выделить всё

Column(Integer, primary_key=True, nullable=True),
Однако это не похоже на хорошую практику, и все равно она не сработала, поэтому любые советы будут очень признательны.

Подробнее здесь: https://stackoverflow.com/questions/786 ... s-non-null

Вернуться в «Python»