【问题标题】:How to do an insert in the database with Python如何使用 Python 在数据库中进行插入
【发布时间】:2022-01-20 01:51:42
【问题描述】:

我有一个执行 Moodle 版本检查的 Python 脚本。 检查 Moodle 版本后,我想插入数据库,但出现以下错误:

line 337
mycursor = db.cursor()
TabError: inconsistent use of tabs and spaces in indentation

这是使用和出现问题的代码:

import import mysql.connector

...

def printversion(version):
if version != 0:
    print ("\nVersion found via " + version.split(';')[2] + " : Moodle " +  version.split(';')[0])
    vuln = version.split(';')[0]
    db = mysql.connector.connect(host="localhost", user="admin", passwd="", database="test")
    mycursor = db.cursor() 
    insertQuery = """INSERT INTO moodle (id,payload) VALUES (%s,%s)"""
    mycursor.execute(insertQuery, ('',vuln))
    db.commit()  
    db.close()
    return version.split(';')[0].replace("v","")
    
print ("\nVersion not found")
return False

报的错误是关于代码缩进的,但是我不知道如何解决这个问题,在数据库中插入版本控制结果。

是带缩进的代码:

enter image description here

【问题讨论】:

  • 你需要在def printversion(version):之后缩进。基本上在 python 中的: 之后,你需要缩进所有应该是块的一部分。这里从if version !=0: 到return False 的所有行都需要一个缩进
  • 在缩进方面不要有创意或固执己见。遵循标准,让每个人的生活更轻松——您、未来的您、使用您的代码的其他人、我们。 Python 的标准缩进是 4 个空格。仅仅允许你发散并不意味着这是一个好主意。
  • 我的错误:第 335 行 vuln = version.split(';')[0] ^ IndentationError: unindent 不匹配任何外部缩进级别

标签: python mysql sql-insert indentation mysql-python


【解决方案1】:

这里你有一个小小的误解,在python的任何函数中,你需要在开始编写任何代码之前提供一个缩进(tab),

即结构是

def your_functionname(parameters)
    < you code here >

因此,以正确的方式,您的代码应如下所示

...

def printversion(version):
    if version != 0:
        print ("\nVersion found via " + version.split(';')[2] + " : Moodle " +  
        version.split(';')[0])
        vuln = version.split(';')[0]
        db = mysql.connector.connect(host="localhost", user="admin", passwd="", 
        database="test")
        mycursor = db.cursor() 
        insertQuery = """INSERT INTO moodle (id,payload) VALUES (%s,%s)"""
        mycursor.execute(insertQuery, ('',vuln))
        db.commit()  
        db.close()
        return version.split(';')[0].replace("v","")
        
    print ("\nVersion not found")
    return False

【讨论】:

  • Polymath,非常感谢您的帮助。脚本它的工作。 :)
【解决方案2】:

您的代码需要缩进函数定义之后的部分。

所以不是这个,

def printversion(version):
if version != 0:
    print ("\nVersion found via " + version.split(';')[2] + " : Moodle " +  version.split(';')[0])
    vuln = version.split(';')[0]
    db = mysql.connector.connect(host="localhost", user="admin", passwd="", database="test")
    mycursor = db.cursor() 
    insertQuery = """INSERT INTO moodle (id,payload) VALUES (%s,%s)"""
    mycursor.execute(insertQuery, ('',vuln))
    db.commit()  
    db.close()
    return version.split(';')[0].replace("v","")

你应该有这个,

def printversion(version):
    if version != 0:
        print ("\nVersion found via " + version.split(';')[2] + " : Moodle " +  version.split(';')[0])
        vuln = version.split(';')[0]
        db = mysql.connector.connect(host="localhost", user="admin", passwd="", database="test")
        mycursor = db.cursor() 
        insertQuery = """INSERT INTO moodle (id,payload) VALUES (%s,%s)"""
        mycursor.execute(insertQuery, ('',vuln))
        db.commit()  
        db.close()
        return version.split(';')[0].replace("v","")

我不知道您的代码的意图,但看起来您可能还想包含 else 语句,

    else:
        print ("\nVersion not found")
        return False

【讨论】:

    【解决方案3】:

    只需制表符即可 如果版本!= 0:

    仅标识这一行

    【讨论】:

    • 我尝试过,但不起作用。这是错误:第 335 行 vuln = version.split(';')[0] ^ IndentationError: unindent 不匹配任何外部缩进级别
    猜你喜欢
    • 2023-02-08
    • 2018-10-28
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多