Python으로 NULL 데이터를 MySQL 데이터베이스에 삽입하려면 어떻게 해야 하나요?
Python 스크립트에서 MySQL로 데이터를 삽입할 때 이상한 오류가 발생합니다.기본적으로 삽입하는 변수가 공백인 것과 관련이 있습니다.MySQL은 공백 변수를 좋아하지 않는 것으로 알고 있습니다만, 다른 방법으로 변경해서 삽입문을 사용할 수 있습니까?
정상적으로 사용할 수 있습니다.IF
스테이트먼트가 공백일 경우 0으로 설정되지만 나중에 MySQL에서 수행할 데이터 분석 중 일부가 잘못될 수 있습니다.변환하는 방법이 있나요?NULL
아니면 MySQL이 받아 들여도 아무것도 추가하지 않는 건가요?
mysqldb를 사용하는 경우 및cursor.execute()
, 값을 전달합니다.None
,것은 아니다."NULL"
:
value = None
cursor.execute("INSERT INTO table (`column1`) VALUES (%s)", (value,))
해답은 이쪽
col1이 char, col2가 int일 경우 트릭은 다음과 같습니다.
insert into table (col1, col2) values (%s, %s) % ("'{}'".format(val1) if val1 else "NULL", val2 if val2 else "NULL");
%s에 를 추가할 필요가 없습니다.sql에 값을 전달하기 전에 처리될 수 있습니다.
이 방법은 예를 들어 sqlalchemy 세션을 사용하여 sql을 실행할 때 작동합니다.session.execute(text(sql))
ps: sql은 아직 테스트되지 않았습니다.
Python에서 SQL 문에서 매개 변수를 사용하는 방법에 대해 간단히 설명합니다.이 항목에 대한 RealPython 문서 - Python을 사용한 SQL 주입 공격 방지 항목을 참조하십시오.다음은 TowardsDataScience.com의 또 다른 유용한 기사입니다. "A Simple Approach To Templated SQL Query in Python"입니다.이것들은 같은 None/NULL 문제에 도움이 되었습니다.
또한 VALUES의 INSERT 쿼리에 직접 "NULL"(따옴표 없음)을 입력하면 SQL Server DB에서 적절하게 해석됩니다.변환 문제가 발생하는 것은 조건부로 NULL 또는 문자열 보간을 통한 값을 추가해야 하는 경우뿐입니다.
예:
cursor.execute("SELECT admin FROM users WHERE username = %s'", (username, ));
cursor.execute("SELECT admin FROM users WHERE username = %(username)s", {'username': username});
업데이트: 이 Stack Overflow에 대한 논의는 제가 하려는 일에 더 부합하며 다른 사람에게 도움이 될 수 있습니다.
예:
import pypyodbc
myData = [
(1, 'foo'),
(2, None),
(3, 'bar'),
]
connStr = """
DSN=myDb_SQLEXPRESS;
"""
cnxn = pypyodbc.connect(connStr)
crsr = cnxn.cursor()
sql = """
INSERT INTO myTable VALUES (?, ?)
"""
for dataRow in myData:
print(dataRow)
crsr.execute(sql, dataRow)
cnxn.commit()
crsr.close()
cnxn.close()
변수를 다음과 같은 문자열과 동일하게 설정하는 것은 어떨까요?'no price'
나중에 숫자를 계산하고 싶을 때 이걸 걸러내면 돼?
filter(lambda x: x != 'no price',list_of_data_from_database)
공백 여부를 빠르게 확인하고 공백일 경우 NULL로 설정합니다.
if(!variable_to_insert)
variable_to_insert = "NULL"
...다음과 같이 삽입된 변수가 삽입문의 따옴표 안에 없는지 확인합니다.
insert = "INSERT INTO table (var) VALUES (%s)" % (variable_to_insert)
...
이하와 같지 않다:
insert = "INSERT INTO table (var) VALUES ('%s')" % (variable_to_insert)
...
언급URL : https://stackoverflow.com/questions/5507948/how-can-i-insert-null-data-into-mysql-database-with-python
'programing' 카테고리의 다른 글
다른 테이블에서 동일한 ID의 SQL 쿼리 수 행 (0) | 2022.09.11 |
---|---|
MariaDB에서 자동 완료를 활성화하려면 어떻게 해야 합니까? (0) | 2022.09.11 |
어제 PHP 날짜 (0) | 2022.09.08 |
AAR을 JAR로 변환하는 방법 (0) | 2022.09.08 |
Java의 "인코딩에 사용할 수 없는 문자" 경고 (0) | 2022.09.08 |