在光标命令“ SELECT x FROM y”中使用变量

时间:2019-09-02 01:09:56

标签: python python-3.x mysql-workbench mysql-python

我一直在尝试创建一个函数,该函数需要输入列名,表名,起始ID和结束ID,然后从与python连接的MYSQL Server中重新创建所需的表。我主要遇到两个问题, 第一行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不存在。

1 个答案:

答案 0 :(得分:0)

只为您提问。如果您的开始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)

顺便说一句,您应该先阅读库文档。

您可以轻松找到它。

更新

正如@约翰·戈登所说。上面的代码对于用户输入col名称和表名称并不安全。

如果在生产时执行此操作。需要做更多检查。