SQLAlchemy에서 NULL 값 삽입하기
SQLAlchemy에서 NULL 값 삽입하기
None 사용:
가장 간단한 방법은 Python의 None
값을 사용하는 것입니다. SQLAlchemy는 None
값을 SQL NULL 값으로 자동 변환합니다.
from sqlalchemy import create_engine, Column, Integer, String, Table
engine = create_engine("sqlite:///mydb.sqlite")
metadata = BaseMetadata()
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# "age" 열에 NULL 값을 삽입합니다.
with engine.connect() as connection:
connection.execute(users.insert(), id=1, name="John Doe", age=None)
sqlalchemy.sql.null() 사용:
sqlalchemy.sql.null()
함수를 사용하여 NULL 값을 직접 생성할 수도 있습니다.
from sqlalchemy import create_engine, Column, Integer, String, Table, sql
engine = create_engine("sqlite:///mydb.sqlite")
metadata = BaseMetadata()
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# "age" 열에 NULL 값을 삽입합니다.
with engine.connect() as connection:
connection.execute(users.insert(), id=1, name="John Doe", age=sql.null())
update() 메서드 사용:
update()
메서드를 사용하여 기존 레코드의 값을 NULL로 업데이트할 수 있습니다.
from sqlalchemy import create_engine, Column, Integer, String, Table
engine = create_engine("sqlite:///mydb.sqlite")
metadata = BaseMetadata()
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# "age" 열을 NULL로 업데이트합니다.
with engine.connect() as connection:
connection.execute(users.update().where(users.c.id == 1), age=None)
insert_or_update() 메서드 사용:
insert_or_update()
메서드는 레코드가 존재하지 않으면 삽입하고 존재하면 업데이트합니다. 이 메서드를 사용하여 NULL 값을 삽입하거나 업데이트할 수 있습니다.
from sqlalchemy import create_engine, Column, Integer, String, Table
engine = create_engine("sqlite:///mydb.sqlite")
metadata = BaseMetadata()
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# "age" 열을 NULL로 삽입하거나 업데이트합니다.
with engine.connect() as connection:
connection.execute(users.insert_or_update(values={"id": 1, "name": "John Doe", "age": None}))
참고
추가 정보
sqlalchemy.types.NullType
데이터 유형을 사용하여 NULL 값을 허용하는 열을 정의할 수 있습니다.
마무리
예제 코드
from sqlalchemy import create_engine, Column, Integer, String, Table
# SQLite 데이터베이스 엔진 생성
engine = create_engine("sqlite:///mydb.sqlite")
# 메타데이터 정의
metadata = BaseMetadata()
# "users" 테이블 정의
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# 1. `None` 사용
# "age" 열에 NULL 값을 삽입합니다.
with engine.connect() as connection:
connection.execute(users.insert(), id=1, name="John Doe", age=None)
# 2. `sqlalchemy.sql.null()` 사용
# "age" 열에 NULL 값을 삽입합니다.
with engine.connect() as connection:
connection.execute(users.insert(), id=2, name="Jane Doe", age=sql.null())
# 3. `update()` 메서드 사용
# "age" 열을 NULL로 업데이트합니다.
with engine.connect() as connection:
connection.execute(users.update().where(users.c.id == 1), age=None)
# 4. `insert_or_update()` 메서드 사용
# "age" 열을 NULL로 삽입하거나 업데이트합니다.
with engine.connect() as connection:
connection.execute(users.insert_or_update(values={"id": 3, "name": "Bob Smith", "age": None}))
실행 방법
- 위 코드를 Python 파일로 저장합니다.
- Python 파일을 실행합니다.
- SQLite 데이터베이스 브라우저를 사용하여 "mydb.sqlite" 데이터베이스를 열고 "users" 테이블을 확인합니다.
결과
id | name | age
-- | -- | --
1 | John Doe | NULL
2 | Jane Doe | NULL
3 | Bob Smith | NULL
SQLAlchemy에서 NULL 값 삽입하기 위한 대체 방법
literal_column() 함수 사용:
from sqlalchemy import create_engine, Column, Integer, String, Table, sql
engine = create_engine("sqlite:///mydb.sqlite")
metadata = BaseMetadata()
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# "age" 열에 NULL 값을 삽입합니다.
with engine.connect() as connection:
connection.execute(users.insert(), id=1, name="John Doe", age=sql.literal_column("NULL"))
update() 메서드와 bindparam() 사용:
update()
메서드와 sqlalchemy.sql.bindparam()
함수를 사용하여 NULL 값을 삽입할 수 있습니다.
from sqlalchemy import create_engine, Column, Integer, String, Table, sql
engine = create_engine("sqlite:///mydb.sqlite")
metadata = BaseMetadata()
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# "age" 열에 NULL 값을 삽입합니다.
null_value = sql.bindparam("null_value", None)
with engine.connect() as connection:
connection.execute(users.update().where(users.c.id == 1), age=null_value)
from sqlalchemy import create_engine, Column, Integer, String, Table, sql
engine = create_engine("sqlite:///mydb.sqlite")
metadata = BaseMetadata()
users = Table("users", metadata,
Column("id", Integer, primary_key=True),
Column("name", String),
Column("age", Integer),
)
# "age" 열에 NULL 값을 삽입하거나 업데이트합니다.
null_value = sql.bindparam("null_value", None)
with engine.connect() as connection:
connection.execute(users.insert_or_update(values={"id": 3, "name": "Bob Smith", "age": null_value}))
참고
마무리
python sqlalchemy