Как выполнить блок кода Python, только если строка была выбрана из базы данных MySQL - PullRequest
0 голосов
/ 04 июля 2019

Я построил набор музыкальных лестниц с питоном, датчиками движения и Raspberry Pi, а также веб-приложение, которое позволяет вам выбрать, какой тип звука инструмента вы хотите создать. Тип инструмента хранится в базе данных MySQL, которую я подключил к коду Python (который издает звуки при поломке луча) и к веб-приложению, которое позволяет пользователям выбирать тип инструмента из базы данных.

Мне просто интересно, есть ли способ запроса базы данных из кода Python, который будет означать, только когда строка выбрана из базы данных, запустить определенный блок кода.

Например, кто-то нажимает «Барабан» в веб-приложении. Инструмент Тип "Барабан" выбран из базы данных MySQL Drumsound.play () должен работать на коде Python.

Есть ли способ сделать это на питоне?

Это для Raspberry Pi 3 с Python 2.7, mySQLdb5 и apache2.

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="*****",
    pw="*****",
    db="stairs"
    )

cursor = mydb.cursor()
cursor.execute("SELECT variableValue FROM stairs WHERE variableValue = 
'instrumentType'")

import RPi.GPIO as GPIO # GPIO
import pygame.mixer # To make sound
pygame.mixer.init()

''' GPIO setup '''
GPIO.setmode(GPIO.BCM) # GPIO setmode
GPIO.setwarnings(False)

'''Define steps and pins here'''
step1 = 4


'''Motion sensor setup here'''
GPIO.setup(step1, GPIO.IN, GPIO.PUD_UP)


'''Piano files here'''
C1 = pygame.mixer.Sound("piano/C1.wav")


'''Drum files here'''
drum1 = pygame.mixer.Sound("drum/C1.wav")



def play(pin):
    sound = sound_pins[pin]
    print("Playing note from pin %s" % pin)
    sound.play()

'''Dictionary of steps and sounds'''
sound_pins = {
    step1: C1,
    step2: D,
    step3: E,
    step4: F,
    step5: G,
    step6: A,
    step7: B,
    step8: C2,
    }

for pin in sound_pins:
        GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
        GPIO.add_event_detect(pin, GPIO.RISING, play, 100)

1 Ответ

0 голосов
/ 04 июля 2019

Возможно, вы захотите использовать словарь Python , чтобы сохранить тип вашего «инструмента» для функции. Это позволяет вам создать отображение, на каком инструменте какой звук воспроизводить.

Возможно, вы спрашиваете себя: «Это похоже на то, что я хочу, чтобы моя база данных делала?». Поскольку вы используете один и тот же pygame.mixer.Sound("SomeWavePath"), вы можете хранить эту связь между названиями инструментов и их звуковыми файлами в самой базе данных. Таким образом, вы можете расширить свой выбор инструментов, просто добавив в базу данных.

Могу ли я также порекомендовать переключиться на Python 3.x, так как версия 2.x скоро завершит свою поддержку (https://pythonclock.org/).) Это также даст вам доступ к новым языковым функциям и более широкому диапазону поддержки библиотеки движется вперед.

EDIT:

E.g Хранение отображения "instrument <-> wav_path" в вашей базе данных.

# Query executing obtains 'wav path' from 'instrument' primary key.
choice = cur.fetchone()  #  "piano/C1.wav"
sound_to_play = pygame.mixer.Sound(choice)

E.g Прикрепление предметов к инструментам

C1 = pygame.mixer.Sound("piano/C1.wav")
drum1 = pygame.mixer.Sound("drum/C1.wav")

instrument_dict = {
    "piano": C1,
    "drum": drum1
}

# Retrieve the sound to play
choice = cur.fetchone()  # From our database, get 'drum' for example
sound_to_play = instrument_dict[ choice ]
# instrument_dict[ 'drum' ] => drum1 Sound Object.

Тогда:

sound_to_play.play()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...