提问人:Norbert Yuhas 提问时间:8/5/2023 最后编辑:BarmarNorbert Yuhas 更新时间:8/5/2023 访问量:28
为什么没有将数据添加到单元格中?
Why is data is not added to the cell?
问:
你能告诉我为什么没有将数据添加到指定的单元格中吗? 我正在尝试收集列表中的所有数字并将它们放在一个单元格中。脚本将完成并清除单元格,但单元格中的数据不会显示。 有必要将列表放在一个单元格中,因为这就是 freebx 的工作方式
#/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()
答:
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),) 一切都按预期进行。非常感谢您的时间和帮助。
评论
CONCAT(cell)
CONCAT
dirty_list = [item for item in dirty_list if item is not None]
list()
list([item])
[item]
value = ','.join(values)
UPDATE
executemany()
executemany()
只是一个快捷方式,用于循环访问列表并对每个元素执行单独的查询。因此,您将使用与列表中不同的值重复更新同一行,最终仅得到最后一个值。