#python #sql #python-3.x #database
#python #sql #python-3.x #База данных
Вопрос:
Итак, я создал базу данных для хранения сотрудников, мои значения в моей базе данных:
- Eno (идентификатор сотрудника)
- фрейм (имя)
- зарплата
- пол (мужской или женский)
Я пытаюсь обновить данные из ввода python в мою базу данных sql. Итак, в основном я прошу пользователя выбрать Eno из списка (показывая строку в базе данных), и если их ввод является допустимым Eno, тогда база данных получит информацию об этом сотруднике. Мой код пока выглядит следующим образом:
change = input("Enter the Employee Number To Make Changes")
mycursor.execute("SELECT Eno FROM Employees WHERE 10 <= 15")
record = mycursor.fetchall()'
for x in record:
print(x)
Мой вывод:
Enter the Employee Number To Make Changes
(36,)
(37,)
(38,)
(39,)
(40,)
Ценю любую помощь!
Комментарии:
1.
database
это общая концепция, какова ваша СУБД, у каждого из них есть свои собственные диалекты ..?2. Внешние Dmbs, использующие sql для хранения данных, интерпретируемых из пользовательского ввода в python3
Ответ №1:
Ваш вопрос требует дополнительной информации, предполагая, что все работает нормально. Вы можете обновить свои данные с помощью:
cursor.execute('''
UPDATE DatabaseName.TableName
SET frame = 'DV', salary = 'DV', sex = 'DV'
WHERE Eno = 'required employee id'
''')
conn.commit()
где DV ссылается на желаемое значение, надеюсь, это поможет.
Комментарии:
1. У меня это выполнение работало идеально, но я пришел к ситуации, когда, если бы было два пользователя по имени Райан, это изменило бы их обоих. мой подход заключался в том, чтобы выбрать дублирующегося пользователя и различать их идентификатор для изменения
2. Я думаю, что ваша проблема скорее связана с дизайном БД, убедитесь, что ваш первичный ключ — это идентификатор
Eno
пользователя, а не имяframe
, поскольку повторяющиеся имена являются распространенными ситуациями в большинстве таблиц, и на них крайне не рекомендуется полагаться. ПОДСКАЗКА : вы можете получить повторяющиеся имена, используяSELECT * FROM.TableName WHERE Eno = 'required employee id'
, а затем выполнить обновление на основе того, что возвращает этот запрос. @Ryano’Riordan3. Рад, что это помогло, пожалуйста, нажмите на зеленую галочку, чтобы помочь сообществу найти ответ в ближайшее время.
4. Хорошо, я действительно не знаю, как выразить это словами, но вот я иду. Итак, поскольку все мои сотрудники находятся в таблице базы данных со своими атрибутами fname salary sex, например, если бы я хотел изменить пол Джона с мужского на женский, как бы я это сделал, потому что в настоящее время при выполнении кода каждый мужчина меняется на женщину
5. Если он меняет каждого мужчину на женщину, убедитесь, что: 1) ваш первичный ключ — это идентификатор 2) у вас есть уникальный идентификатор для каждого работодателя. Если это не поможет, пожалуйста, опубликуйте пример вашей БД в две строки. @Ryano’Riordan
Ответ №2:
Если я правильно понимаю, вы пытаетесь обновить свою базу данных SQL из своего скрипта python.
Чтобы получить список допустимых записей, вам нужно извлечь номера сотрудников из кортежей.
change = input("Enter the Employee Number To Make Changes")
mycursor.execute("SELECT Eno FROM Employees WHERE 10 <= 15")
record = mycursor.fetchall()'
records = [str(x[0]) for x in record]
# Check valid entry
if change in records:
# Set up a dictionary
changes = dict()
fields = ["frame","salary","sex"]
for f in fields:
value = input("{}: ".format(f))
changes[f] = value
# Do the SQL stuff
mycursor.execute("""
UPDATE Employees
SET {} = {}, {} = {}, {} = {}
WHERE Eno = {}
""".format(fields[0],changes[fields[0],fields[1],changes[fields[1],fields[2],changes[fields[2],change))
else:
# insert some error handling...
… или что-то в этом роде.
Помогает ли это?
Комментарии:
1. omg это действительно хорошая концепция. единственная другая ошибка, которую я получаю в sql. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом ‘{} = {}, {} = {}, {} = {} ГДЕ Eno = {}’ в строке 1
2. Проверьте, что оператор SQL создает то, что он должен делать в виде строки, я не проверял этот бит, я должен признать