为什么没有将数据添加到单元格中?

Why is data is not added to the cell?

提问人:Norbert Yuhas 提问时间:8/5/2023 最后编辑:BarmarNorbert Yuhas 更新时间:8/5/2023 访问量:28

问:

你能告诉我为什么没有将数据添加到指定的单元格中吗? 我正在尝试收集列表中的所有数字并将它们放在一个单元格中。脚本将完成并清除单元格,但单元格中的数据不会显示。 有必要将列表放在一个单元格中,因为这就是 freebx 的工作方式

enter image description here

#/usr/bin/python3

import mysql.connector

try:
    connection = mysql.connector.connect(host='localhost',
                                     database='asterisk',
                                     user='freepbxuser',
                                     password='',
                                     autocommit=True)
    sql_select_Query = "SELECT CONCAT(cell) FROM userman_users"
    cursor = connection.cursor()
    cursor.execute(sql_select_Query)
    dirty_text = [i[0] for i in cursor.fetchall()]
    for item in dirty_text.copy():
        if item is None:
           dirty_text.remove(item)
    SYMBOLS = '{}()[].,:;+-*/&|<>=~'
    clear_text = []
    for element in dirty_text:
        temp = ""
        for ch in element:
            if ch not in SYMBOLS:
                temp += ch
        clear_text.append(temp)
    values = [list([item]) for item in clear_text]
    cursor.executemany ("""
    UPDATE pinsets
    SET passwords=%s
    WHERE pinsets_id=1
    """, (values))
except mysql.connector.Error as e:
    print("Error", e)
finally:
    if connection.is_connected():
        connection.close()
        cursor.close()
python mysql sql-update

评论

1赞 Barmar 8/5/2023
你为什么写? 用于连接多个字符串,它只用一个参数做任何有用的事情。CONCAT(cell)CONCAT
1赞 Barmar 8/5/2023
在循环访问列表时,不要从列表中删除。用dirty_list = [item for item in dirty_list if item is not None]
1赞 Barmar 8/5/2023
您无需打电话. 已经是一个列表。list()list([item])[item]
1赞 Barmar 8/5/2023
这通常不是一个好主意,请参阅 stackoverflow.com/questions/3653462/...。但是,如果这是您真正想要的,则需要使用然后执行一个来添加它,而不是.value = ','.join(values)UPDATEexecutemany()
1赞 Barmar 8/5/2023
executemany()只是一个快捷方式,用于循环访问列表并对每个元素执行单独的查询。因此,您将使用与列表中不同的值重复更新同一行,最终仅得到最后一个值。

答:

1赞 Tim Roberts 8/5/2023 #1

这做了我认为你想做的事情。这将从“userman_users”的“单元格”列中获取所有非 NULL 值,从中删除任何特殊字符,并将它们作为逗号分隔的列表存储在“pinsets”的一行中:

connection = mysql.connector.connect(host='localhost',
                                 database='asterisk',
                                 user='freepbxuser',
                                 password='',
                                 autocommit=True)
sql_select_Query = "SELECT cell FROM userman_users;"
cursor = connection.cursor()
cursor.execute(sql_select_Query)
dirty_text = [i[0] for i in cursor.fetchall() if i[0]]

SYMBOLS = '{}()[].,:;+-*/&|<>=~'
clear_text = []
for element in dirty_text:
    clear_text.append( ''.join(ch for ch in element if ch not in SYMBOLS) )

cursor.execute ("""
    UPDATE pinsets
    SET passwords=%s
    WHERE pinsets_id=1;
""", (','.join(clear_text),)
)

评论

0赞 Norbert Yuhas 8/5/2023
谢谢,我会尝试你的版本。因此,我需要得到一个数字列表,每行一个,单元格中没有逗号。再次非常感谢你
0赞 Norbert Yuhas 8/5/2023
我将 (','.join(clear_text),) 更改为 ('\n'.join(clear_text),) 一切都按预期进行。非常感谢您的时间和帮助。