繁体   English   中英

Python MySQL 动态插入 - 列名作为变量,值作为变量

[英]Python MySQL Dynamic Insert - Column Name as Variable, Values as Variables

我正在尝试创建一个填充 MySQL 表的 function。 function 接收几个变量作为输入:

Symbol
Var_Date
Stat_Name
Stat_Value

Stat_Name 的值随着代码的运行而变化,例如 Enterprise_Value、Profit_Margin、EBITDA - 这些是表中的列名。 Stat_Value 是进入行的数据。

此代码需要一个列名作为变量,三个值作为变量。

我发现this previous article看起来很有希望,但我还没有让它工作。 动态 mysql 在 python 中插入语句

我在下面的代码中粘贴了我的尝试:

dbname = "mydb"
var_table = "exc"

symbol = 'ABC'
var_date = '20200629'
stat_name = 'Enterprise_Value'
stat_value = '12345'

def funPopulateTables(symbol, var_date, stat_name, stat_value):
    conn = pymysql.connect(host="localhost", user="root", passwd=mypass, db=dbname)

    my_cursor = conn.cursor()

    query_placeholders = ', '.join(['%s'] * len(stat_value))
    query_columns = ', '.join(stat_name)

    add_word = ("INSERT INTO {table} " "(Symbol, Date, (%s)) " "VALUES (%s, %s, %s)") %(query_columns, query_placeholders)
    data_word = (symbol, var_date, stat_value)
    my_cursor.execute(add_word.format(table=var_table), data_word)

    conn.commit()
    conn.close()

funPopulateTables(symbol, var_date, stat_name, stat_value)

任何帮助将不胜感激。 提前致谢。

遵循 khelwood 的建议后,此代码现在可以正常工作:

dbname = "mydb"
var_table = "exc"

var_date = '20200629'
symbol = 'AAB'
dict_stats = {'Enterprise_Value' : '12345', 'EBITDA' : '67890'}

def funPopulateTables(symbol, var_date, key, stat):
    conn = pymysql.connect(host="localhost", user="root", passwd=mypass, db=dbname)

    my_cursor = conn.cursor()

    add_word_temp = str("INSERT INTO {table} " "(Symbol, Date, ") + key + str(") " " VALUES (%s, %s, %s)")
    print(add_word_temp)
    add_word = str(add_word_temp)
    data_word = (symbol, var_date, stat)
    my_cursor.execute(add_word.format(table=var_table), data_word)

    conn.commit()
    conn.close()


for key in dict_stats:
    print(key)
    stat = dict_stats[key]
    print(stat)
    funPopulateTables(symbol, var_date, key, stat)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM