如何将 mysql 数据库中的列的总和存储到 python 变量?

How to store the sum of a column from a mysql database to a python variable?

前面初学者的代码有点长,请大家帮忙

我有一个包含以下值的数据库:

Sl.No trips sales price
1 5 20 220
2 8 30 330
3 9 45 440
4 3 38 880

我正在尝试使用 mysql-connector 和 python 来获取 trips、sales 和 price 列的总和作为变量,并使用它在 python 脚本。 这是我目前所拥有的:

def sum_fun():

    try:
        con = mysql.connector.connect(host='localhost',
        database='twitterdb', user='root', password='mypasword', charset='utf8')

        if con.is_connected():
            cursor = con.cursor(buffered=True)
            def sumTrips():
                cursor.execute("SELECT SUM(trips) FROM table_name")
                sum1=cursor.fetchall()[0][0]
                return int(sum1)
            def sumSales():
                cursor.execute("SELECT SUM(sales) FROM table_name")
                sum2=cursor.fetchall()[0][0]
                return int(sum2)
            def sumPrice():
                cursor.execute("SELECT SUM(price) FROM table_name")
                sum3=cursor.fetchall()[0][0]
                return int(sum3)
    except Error as e:
        print(e)
    cursor.close()
    con.close()

我想接收三个总和作为三个变量 sum_tripssum_salessum_price 并为它们分配一个积分系统,以便:

trip_points=20*sum_trips
sales_points=30*sum_sales
price_points=40*sum_price

然后将三个变量trip_points, sales_points, prices_points插入到同一个数据库Points中的另一个table中,列名与变量名相同

长期以来,我一直在努力寻找这个问题的答案。任何帮助或指导将不胜感激。我是大多数这些东西的初学者,所以如果有更好的方法来实现我正在寻找的东西,请告诉我。谢谢

我可能遗漏了一些东西,但是 运行 针对同一个 table 的 3 个不同查询(在 MySQL 中也是如此,它不是柱状的)不是很有效,我可能会只需执行以下命令:

CREATE new_table as 
(SELECT 
        SUM(trips) * 20 as trip_points,
        SUM(sales) * 20 as sales_points,
        SUM(price) * 20 as price_points
FROM table_name)

根据 MySQL 提示或 Python(如果您正在尝试某种自动化)

让我知道这是否有助于您前进。

这是您的代码,稍作改动 returns 一个具有三个值的元组,例如 (sumTrips, sumSales, sumPrice) 但我故意忽略了关闭连接,(请参阅第二个代码在连接获取的位置剪下自动关闭):

def sum_fun():
    def sumTrips(cursor):  # receives the cursor object, for queries
        cursor.execute("SELECT SUM(trips) FROM table_name")
        sum1=cursor.fetchall()[0][0]
        return int(sum1)
    def sumSales(cursor):
        cursor.execute("SELECT SUM(sales) FROM table_name")
        sum2=cursor.fetchall()[0][0]
        return int(sum2)
    def sumPrice(cursor):
        cursor.execute("SELECT SUM(price) FROM table_name")
        sum3=cursor.fetchall()[0][0]
        return int(sum3)
    
    try:
        con = mysql.connector.connect(host='localhost', password='mypasword',
                                      database='twitterdb', user='root',  charset='utf8')
        cursor = con.cursor(buffered=True)
        return (sumTrips(cursor), sumSales(cursor), sumPrice(cursor))

    except Exception as e:
        print(e)
        raise Exception("The connection fail because of this error: {}".format(e))

您可能希望将其调用为:

sumTrips, sumSales, sumPrice = sum_fun()

这段代码给出了相同的结果,但使用了 with:

def sum_fun():
    def sum_column(cursor, column):
        cursor.execute(f"SELECT SUM({column}) FROM table_name")
        sum1=cursor.fetchall()[0][0]
        return int(sum1)
    
    try:
        with mysql.connector.connect(host='localhost', password='mypasword',
                                     database='twitterdb', user='root',  charset='utf8') as con:
            with con.cursor(buffered=True) as cursor:
                return (sum_column(cursor, "trips"), sum_column(cursor, "sales"), sum_column(cursor, "price"))

    except Exception as e:
        print(e)
        raise Exception("The connection fail because of this error: {}".format(e))

上面的代码使用了with语句,它会在with中的块结束时关闭连接,因为调用了__exit__()方法,而__exit__()方法又调用了close()方法关闭连接。