猿问

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

我目前正在完成学校的自动脚本作业...我正在尝试创建一个表(如果它不存在)。但我希望该表具有来自计算机的主机名(它在虚拟机上工作)。我尝试在神奇的互联网上进行搜索。但我找不到明确的答案。


是否可以添加这样的主机名?


#!/bin/python3

import psutil

import socket

import mysql.connector





machine = socket.gethostname()

memory = psutil.virtual_memory()[2]

disk = psutil.disk_usage('/').percent

cpu = 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))"

这样就可以工作了。


幕布斯7119047
浏览 162回答 2
2回答

慕哥9229398

你似乎只是sql字符串错误。您正在尝试将 3 个字符串添加在一起,但混淆了语法,以下是一些具有正确语法的选项:# option 1sql = f"CREATE TABLE IF NOT EXISTS {machine} (virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255)(;"# option 2sql = "CREATE TABLE IF NOT EXISTS {table_name} (virtual_mem varchar(255), disk_usage varchar(255),cpu_usage varchar (255));".format(&nbsp; &nbsp;table_name=machine)基本上,代码中的“machine”是一个字符串,并且是您在那里的sql块,我们希望这个字符串被“注入”到我们的字符串中。在 python 中执行此操作的方法是使用字符串格式/格式化字符串,甚至只是简单的连接(我更喜欢前两个选项,因为它们更清晰)有关更多信息,请参阅本文:https ://realpython.com/python-f-strings/

慕仙森

您尝试格式化 sql 查询的方式出现错误。请更改以下行:sql&nbsp;=&nbsp;"CREATE&nbsp;TABLE&nbsp;IF&nbsp;NOT&nbsp;EXISTS&nbsp;"+&nbsp;machine("virtual_mem&nbsp;varchar(255),&nbsp;disk_usage&nbsp;varchar(255),cpu_usage&nbsp;varchar&nbsp;(255);")对于这样的格式字符串:sql&nbsp;=&nbsp;f"CREATE&nbsp;TABLE&nbsp;IF&nbsp;NOT&nbsp;EXISTS&nbsp;{machine}&nbsp;(virtual_mem&nbsp;varchar(255),&nbsp;disk_usage&nbsp;varchar(255),cpu_usage&nbsp;varchar&nbsp;(255);"如果您检查 mysql 连接器提供的格式化选项会更好,这样查询替换将由连接器引擎执行,这很可能可以防止 SQL 注入问题。
随时随地看视频慕课网APP

相关分类

Python
我要回答