반응형
False 열 값에 대한 필터링이 True로 반환됨
두 번째 테이블에 비트 열이 있는 왼쪽 조인을 하고 있는 테이블이 두 개 있습니다.필터는 해당 비트가 False인 열을 반환합니다.그러나 나중에 루프 내부에서 해당 값을 확인하면 true로 표시됩니다.
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, or_
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm.exc import NoResultFound
# from sqlalchemy.exc import DataError
Base = declarative_base()
class BoardGame(Base):
__tablename__ = 'game_detail'
id = Column(Integer, primary_key=True)
name = Column(String)
description = Column(String)
process = relationship('Process', uselist=False, back_populates='game_detail')
def __repr__(self):
return "<BoardGame(id='{}', name='{}', description='{}'".format(
self.id, self.name, self.description
)
class Process(Base):
__tablename__ = 'process'
game_id = Column(Integer, ForeignKey('game_detail.id'), primary_key=True)
description_bigram = Column(Boolean)
game_detail = relationship('BoardGame', back_populates='process')
sa_engine = create_engine('mysql+pymysql://bgg:blahblahblah@localhost:49000/boardgamegeek?charset=utf8mb4', pool_recycle=3600)
session = Session(bind=sa_engine)
# Set the scripts execution range of data
maximum_games_to_process = 1
for game in session.query(BoardGame.id, Process.description_bigram).join(Process, isouter=True).filter(Process.description_bigram.is_(False)).limit(maximum_games_to_process):
print('description_bigram', type(game.description_bigram), game.description_bigram)
print(game)
위를 달리다 보면 나는 기분이 좋아집니다.
description_bigram <class 'bool'> True
(1, True)
하지만 HeidiSQL의 데이터를 보면 그렇지 않다는 것을 알 수 있습니다.
game_id;description_bigram
1;0
2;1
3;0
4;0
5;1
HeidiSQL에 나와 있는 것과 같은 프로세스 테이블에 대한 create code입니다.
CREATE TABLE `process` (
`game_id` INT(11) NOT NULL,
`description_bigram` BIT(1) NOT NULL,
PRIMARY KEY (`game_id`),
CONSTRAINT `FK__GAME_ID_DESCRIPTION` FOREIGN KEY (`game_id`) REFERENCES `game_detail` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
나는 일부 게시물이 부울 열에 대한 SQLAlchemy의 문제를 회피하는 것을 보았고 사람들은 대신 정수로 작동하도록 테이블과 코드를 변경합니다(링크는 내 상황과 비슷할 뿐입니다).나는 그것이 잘 될 것이라고 확신하지만 나는 비트 열과 테이블 부울 정의에 대해 잘 작동하는 다른 프로그램들이 있어서 왜 이것이 작동하지 않는지 잘 모르겠습니다.제가 볼 수 있는 후드 밑에 뭔가가 있나요?
SQLLchemy에서 생성한 쿼리입니다.
SELECT game_detail.id AS game_detail_id, process.description_bigram AS process_description_bigram
FROM game_detail LEFT OUTER JOIN process ON game_detail.id = process.game_id
WHERE process.description_bigram IS false
저는 칼럼이 올바른 값을 등록하도록 몇 가지 시도를 해보았는데 계속해서 그것이 사실이라는 것을 알게 되었습니다.
Python은 버전 3.6.5, SQLLechemy는 1.2.7, 10.3.13-MariaDB
언급URL : https://stackoverflow.com/questions/55055959/filtering-on-false-column-value-returns-with-true
반응형
'programing' 카테고리의 다른 글
jquery ajax와 함께 JSON을 PHP에 게시하는 중 (0) | 2023.10.14 |
---|---|
데이터베이스에서 행 선택(strlen) (0) | 2023.10.14 |
자바스크립트 >> 연산자는 무엇이고 어떻게 사용합니까? (0) | 2023.10.09 |
c에서 printf를 통해 char array를 인쇄하는 방법? (0) | 2023.10.09 |
StAX보다 SAX를 언제 선택해야 합니까? (0) | 2023.10.09 |