在光标命令“从y中选择x”中使用变量

2024-09-28 01:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试创建一个函数,通过输入列名、tablename、start ID和end ID,从与python连接的MYSQL服务器上重新创建所需的表, 首先,行mycursor.execute("SELECT colNames FROM tablename")不理解colNames和tablename等变量,它只获取列和表名的确切名称。我希望能够通过手动输入变量来调用一个表。我的第二个问题是函数只显示从StartId开始并以EndId结束的行,为此我不知道如何修改for循环来在这个上下文中为我执行此操作。你知道吗

这是一个用python编写的mysql包,我需要提取一个指定的列来开始机器学习过程(周期检测、特征提取、特征选择等)

import mysql.connector
from mysql.connector import Error

mydb = mysql.connector.connect(
    host='localhost',
    database='feldbuslogging',
    user='root',
    password='xxx'
)


def readFromTable(connection, tablename, colNames, startId, endId):
    tablename = input("Input Tablename: ")
    colNames = input("Input Column Name: ")
    startId = input("Input Start ID: ")
    endId = input("Input End ID: ")
    startId = int(startId)
    endId = int(endId)
    mycursor = mydb.cursor()
    mycursor.execute("SELECT colNames FROM tablename")
    myresult = mycursor.fetchall()
    for x in myresult(startId: endId):
        print(x)

我希望输出是一个新表,其中包含从StartId开始并以EndId结束的所需变量和行。你知道吗

  • for x in myresult(startId:endId)获取invalid Syntax
    • 我想这不是确切的说法。你知道吗
  • mycursor.execute("SELECT colNames FROM tablename")获取feldbuslogging.tablename不存在。你知道吗

Tags: fromidforinputexecuteconnectormysqlselect
1条回答
网友
1楼 · 发布于 2024-09-28 01:31:42

只是为了你的问题。如果起始id和结束id是主键id

您可以进行如下简单的修改(不安全):

mycursor = mydb.cursor()
mycursor.execute(
    "SELECT {col} FROM {tbl} WHERE id>=%s AND id<%s".format(
        col=colNames, tbl=tablename
    ),
    (startId, endId)
)
myresult = mycursor.fetchall()
for x in myresult:
    print(x)

顺便说一句,你应该先阅读图书馆的文档。你知道吗

你很容易找到这个。你知道吗

更新

正如约翰·戈登所说。上面的代码对于由用户输入的列名称和表名称是不安全的。你知道吗

如果你在生产中这样做。需要做更多的检查。你知道吗

相关问题 更多 >

    热门问题