我对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的区别是什么,数据库注入到底是什么,如果我在第一次尝试做的资格作为字符串串联,我应该尽量避免。
太感谢你了!
2条答案
按热度按时间8yparm6h1#
如果列名或别名包含空格,则需要将其放在反记号中。
不能为标识符(如表名、列名或别名)使用占位符,只有在允许使用表达式的情况下才能使用占位符。
wr98u20j2#
不能用查询参数代替列别名。列别名的规则与列标识符相同,必须在传递查询字符串之前在查询中固定列别名。
所以你可以这样做: