为了账号安全,请及时绑定邮箱和手机立即绑定

CREATE TABLE IF NOT EXISTS SQL 行给定示例机器名称

CREATE TABLE IF NOT EXISTS SQL 行给定示例机器名称

幕布斯7119047 2023-12-12 21:17:07
我目前正在完成学校的自动脚本作业...我正在尝试创建一个表(如果它不存在)。但我希望该表具有来自计算机的主机名(它在虚拟机上工作)。我尝试在神奇的互联网上进行搜索。但我找不到明确的答案。是否可以添加这样的主机名?#!/bin/python3import psutilimport socketimport mysql.connectormachine = socket.gethostname()memory = psutil.virtual_memory()[2]disk = psutil.disk_usage('/').percentcpu = psutil.cpu_percent()#print (machine, memory, disk, cpu)def create_table():    try:        connection = mysql.connector.connect(host='192.168.0.2',                                             database='gegevens',                                             user='db_user',                                             password='Welkom01')        if connection.is_connected():            cursor = connection.cursor()            sql = "CREATE TABLE IF NOT EXISTS "+ machine("virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255);")            cursor.execute(sql)            connection.commit()    finally:        if (connection.is_connected()):            cursor.close()            connection.close()            print("MySQL connection is closed")create_table()或者你们建议我采取不同的做法。因为当我尝试像这样运行它时,我收到了 TypeError;Traceback (most recent call last):  File "./agent.py", line 36, in <module>    create_table()  File "./agent.py", line 23, in create_table    sql = "CREATE TABLE IF NOT EXISTS "+ machine("virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255);")TypeError: 'str' object is not callable通过许多 quamrana 和 S3DEV 我已经弄清楚如何完成它......我已经更改了第 23 行:sql = "CREATE TABLE IF NOT EXISTS "+ machine("virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255);")进入:sql = f"CREATE TABLE IF NOT EXISTS {machine} (virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255))"这样就可以工作了。
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

你似乎只是sql字符串错误。您正在尝试将 3 个字符串添加在一起,但混淆了语法,以下是一些具有正确语法的选项:


# option 1

sql = f"CREATE TABLE IF NOT EXISTS {machine} (virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255)(;"

# option 2

sql = "CREATE TABLE IF NOT EXISTS {table_name} (virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255));".format(

   table_name=machine

)

基本上,代码中的“machine”是一个字符串,并且是您在那里的sql块,我们希望这个字符串被“注入”到我们的字符串中。


在 python 中执行此操作的方法是使用字符串格式/格式化字符串,甚至只是简单的连接(我更喜欢前两个选项,因为它们更清晰)


有关更多信息,请参阅本文:https ://realpython.com/python-f-strings/


查看完整回答
反对 回复 2023-12-12
?
慕仙森

TA贡献1827条经验 获得超7个赞

您尝试格式化 sql 查询的方式出现错误。请更改以下行:

sql = "CREATE TABLE IF NOT EXISTS "+ machine("virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255);")

对于这样的格式字符串:

sql = f"CREATE TABLE IF NOT EXISTS {machine} (virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255);"

如果您检查 mysql 连接器提供的格式化选项会更好,这样查询替换将由连接器引擎执行,这很可能可以防止 SQL 注入问题。


查看完整回答
反对 回复 2023-12-12
  • 2 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信