#python #mysql #python-3.x #mysql-workbench
#python #mysql #python-3.x #mysql-workbench
Вопрос:
У меня есть код, который генерирует случайное число, и база данных mysql, в которой есть некоторые числа, которые должны совпадать со многими случайно сгенерированными. Программа должна прерваться после обнаружения совпадения, однако она продолжает работать, даже если я вижу несколько сгенерированных совпадений. Я несколько раз перепроверил базу данных, и все цифры там. Я новичок в кодировании, поэтому, полагаю, я неправильно запрашиваю базу данных? Был бы признателен за любую помощь. Спасибо
import random
import mysql.connector
mydb = mysql.connector.connect(
host = "localhost",
user = "root",
passwd = "password",
database = "testdb"
)
my_database = mydb.cursor()
sql_statement = "SELECT * FROM numbers"
my_database.execute(sql_statement)
output = my_database.fetchall()
while True:
ran = random.randrange(100000,200000,100)
if ran in output:
print("MATCH!",ran)
break
else:
print(ran)
'''
Комментарии:
1.
fetchall()
возвращает список кортежей.ran
является целым числом, которое не равно кортежу (даже если кортеж содержит целое число в качестве единственного элемента). Вам нужно перебирать каждый кортеж.2. Спасибо за ваш ответ. Вы имеете в виду добавление «для x в вывод:» в строке 16, а затем отступ для остальных?
3. Или, если в таблице есть только один столбец, вы могли бы сказать
if (ran,) in output:
4. Это сработало! большое вам спасибо!
5. Вы выполняли какую-либо отладку? Я бы рекомендовал прочитать ericlippert.com/2014/03/05/how-to-debug-small-programs .
Ответ №1:
Согласно документации mysql python connector, fetchall() возвращает список кортежей. Поэтому вам нужно будет перебирать каждый кортеж и прерывать, когда ran находится внутри любого из кортежей. В качестве альтернативы вы можете использовать функцию any(), как я показываю ниже, которая была бы немного более питонической.
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-fetchall.html
while True:
if any(ran in tup for tup in output):
print("MATCH!", ran)
break
else:
print(ran)