mysql 执行游标时出错,需要引号时执行

brjng4g3  于 2023-02-18  发布在  Mysql
关注(0)|答案(2)|浏览(129)

我对SQL还是个新手,目前我正试图加深对如何通过cursor.execute()传递命令的理解,目前我正试图从表中抓取一列并将其重命名为不同的名称。

import mysql.connector

user = 'root'
pw = 'test!*'
host =  'localhost'
db =  'test1'

conn = mysql.connector.connect(user=user, password=pw, host=host, database=db)
cursor = conn.cursor(prepared=True)
new_name = 'Company Name'
query = f'SELECT company_name AS {new_name} from company_directory'
cursor.execute(query)
fetch = cursor.fetchall()

我也这样试过:

query = 'SELECT company_name AS %s from company_directory'
cursor.execute(query, ('Company Name'),)
fetch = cursor.fetchall()

但会返回以下错误:

stmt = self._cmysql.stmt_prepare(statement)
_mysql_connector.MySQLInterfaceError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? from company_directory' at line 1

我正在使用python和mySQL。我一直在阅读关于数据库注入和不使用字符串连接的文章,但每次我尝试使用%s时,我都会收到类似下面的错误。我曾尝试切换到?语法,但我收到相同的错误。
如果有人能ELI5的区别是什么,数据库注入到底是什么,如果我在第一次尝试做的资格作为字符串串联,我应该尽量避免。
太感谢你了!

8yparm6h

8yparm6h1#

如果列名或别名包含空格,则需要将其放在反记号中。

query = f'SELECT company_name AS `{new_name}` from company_directory'

不能为标识符(如表名、列名或别名)使用占位符,只有在允许使用表达式的情况下才能使用占位符。

wr98u20j

wr98u20j2#

不能用查询参数代替列别名。列别名的规则与列标识符相同,必须在传递查询字符串之前在查询中固定列别名。
所以你可以这样做:

query = f"SELECT company_name AS `{'Company Name'}` from company_directory'
cursor.execute(query)

相关问题