我想使用python-mariadb连接器在表中插入一个新行。为此,我更喜欢使用SET子句。出于某种原因,如果我只想保存int(即y=2(,它确实有效,但当我使用字符串时,会出现以下错误
"字段列表"中的未知列"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连接器,但这应该很好,因为它适用于其他数据库函数。
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连接器/Python使用准备好的语句,对元组中的值进行清理并将其插入位置的问号(?(。这比插入更安全使用用户提供的f字符串或格式说明符信息
查询结果存储在光标对象的列表中。查看结果,您可以在光标上循环。
添加数据
使用与INSERT语句相同的execute((方法,可以向表中添加行。
cursor.execute( "INSERT INTO employees (first_name,last_name) VALUES (?, ?)", (first_name, last_name))