尝试使用Python在mysql中选择记录时出现问题

noj0wjuj  于 2023-01-12  发布在  Mysql
关注(0)|答案(2)|浏览(122)
    • 错误信息**

SQL语法中有错误;请检查与您的MariaDB服务器版本对应的手册,以了解在第1行" % s"附近使用的正确语法

    • MySQL数据库表**
CREATE TABLE `tblorders` (
  `order_id` int(11) NOT NULL,
  `order_date` date NOT NULL,
  `order_number` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `tblorders`
  ADD PRIMARY KEY (`order_id`),
  ADD UNIQUE KEY `order_number` (`order_number`);

ALTER TABLE `tblorders`
  MODIFY `order_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
    • 代码**
mydb = mysql.connector.connect(host = "localhost", user = "root", password = "", database = "mydb")
        
mycursor = mydb.cursor()
sql = "Select order_id from tblorders where order_number=%s"        
val = ("1221212")
mycursor.execute(sql, val)

我错过什么了吗?

nafvub8i

nafvub8i1#

您必须传递一个列表或元组作为参数,但单个值的元组只是括号中的标量。
以下是一些确保val被解释为元组或列表的解决方法:

sql = "Select order_id from tblorders where order_number=%s"        
val = ("1221212",)
mycursor.execute(sql, val)

sql = "Select order_id from tblorders where order_number=%s"        
val = ["1221212"]
mycursor.execute(sql, val)

这是Python的一个特点,我总是觉得很奇怪,但这是有道理的。

nvbavucw

nvbavucw2#

如果你想插入数据,你必须修改你的SQL。使用INSERT代替SELECT,如下所示:

INSERT INTO tblorders (order_number) VALUES ("122121");

该语句将向表中添加新记录。此外,在MariaDB中,您需要使用**?,而不是%s**,后者适用于Mysql数据库。

sql = "INSERT INTO tblorders (order_number) VALUES (?);"
val = "1231231"
mycursor.execute(sql, [val])

相关问题