mariadb 커넥터(python)가 있는 Set Clause로 문자열을 삽입할 수 없습니다.
python-mariadb 커넥터를 사용하여 테이블에 새 행을 삽입합니다.그러기 위해서는 SET 조항을 사용하는 것이 좋습니다.어떤 이유로 ints(예: y=2)만 저장하려고 하면 작동하지만 문자열을 사용하면 다음 오류가 발생합니다.
'field list'의 알 수 없는 열 'myString'
문자열의 내용이 열 이름이라고 생각하는 것 같습니다.수정 방법(INSERT INTO로 할 수 있습니다)VALUES... 단, 여기서 SET 절을 사용합니다.)제가 알기로는, int와 str 둘 다 오류를 발생시키지 않고 저장할 수 있습니다. 감사합니다.
아래의 코드 예를 참조하십시오.
def myfunction():
x = 1
y ='myString'
db = connect_db()
cur = db.cursor()
sql = "INSERT INTO Table SET col1={}, col2={}"
cur.execute(sql.format(x, y))
db.commit()
db.close()
return
여기에서는 MariaDB Connector를 사용하지만 다른 DB 기능에서는 작동하기 때문에 문제가 없습니다.
import mariadb
def connect_db():
db = mariadb.connect(
user="user",
password="123",
host="localhost",
port=3306,
database="DB"
)
db.autocommit = False
return db
삽입에 올바른 구문을 사용하지 않습니다.
sql = "INSERT INTO Table (col1,col2) values({}, {})"
그러나 기존 행을 갱신하는 경우:
sql = "UPDATE Table SET col1={}, col2={} WHERE id = {}"
아마 'where' 조항이 필요할 겁니다
해당 코드는 SQL 문을 생성합니다.
INSERT INTO Table SET col1=1, col2=myString;
이것은 잘못된 구문입니다.문자열은 따옴표로 묶어야 합니다.
INSERT INTO Table (col1, col2) VALUES (1, 'myString');
def myfunction():
x = 1
y ='myString'
db = connect_db()
cur = db.cursor()
sql = "INSERT INTO Table (col1, COL2) VALUES ({}, '{}')"
cur.execute(sql.format(x, y))
db.commit()
db.close()
return
하지만 위는 깨지기 쉽습니다.SQL 문을 만들기 위해 문자열 빌드 메서드를 사용하지 마십시오. 매개 변수 바인딩을 사용하는 것이 훨씬 좋습니다.
def myfunction():
x = 1
y ='myString'
db = connect_db()
cur = db.cursor()
sql = "INSERT INTO Table (col1, col2) VALUES (?, ?)"
cur.execute(sql, (x, y))
db.commit()
db.close()
return
MariaDB 커넥터의 메뉴얼에서는, 이러한 점에 대해 설명합니다.
데이터 취득
초기 코드가 준비되면 데이터 작업을 시작할 수 있습니다.가장 먼저 해야 할 일은 데이터베이스에서 정보를 가져오는 것입니다.다음은 직원 데이터베이스에 대한 쿼리 코드입니다.
cur.execute( "SELECT first_name,last_name FROM employees WHERE first_name=?", (some_name,))
MariaDB Connector/Python은 준비된 문장을 사용하여 태플의 값을 삭제하고 물음표(?) 위치에 삽입합니다.이는 사용자가 제공한 정보를 사용할 때 f-string 또는 형식 지정자를 통해 삽입하는 것보다 안전합니다.
쿼리 결과는 커서 개체의 목록에 저장됩니다.결과를 보려면 커서 위로 루프하십시오.
데이터 추가
INSERT 문과 같은 execute() 메서드를 사용하여 테이블에 행을 추가할 수 있습니다.
cursor.execute( "INSERT INTO employees (first_name,last_name) VALUES (?, ?)", (first_name, last_name))
언급URL : https://stackoverflow.com/questions/68367706/cannot-insert-strings-with-set-clause-with-mariadb-connector-python
'programing' 카테고리의 다른 글
MySQL은 두 열을 하나의 열에 결합합니다. (0) | 2022.11.13 |
---|---|
5일 전 날짜는 어떻게 알 수 있죠? (0) | 2022.11.13 |
팬더 DataFrame에서 이상 징후 감지 및 제외 (0) | 2022.11.13 |
어레이에 추가하는 방법 (0) | 2022.11.13 |
JavaScript를 사용하여 '터치 스크린' 장치를 감지하는 가장 좋은 방법은 무엇입니까? (0) | 2022.11.05 |