Я только начал работать с Python сегодня, поэтому я нахожусь на уровне новичка.
Я пытаюсь создать управляемое базой данных "дерево решений".После завершения он будет работать почти как история «выбери свое собственное приключение», как видно из примеров Python в Интернете.
У меня есть таблица в PostgreSQL со следующими столбцами: id, textfield, nextitem
Вот что я хочу сделать: -Сценарий начнется с некоторой записи в таблице.Для всех целей прямо сейчас, мы просто начнем с идентификатора 1. Мы запросим эту первую строку (или любую строку, которая может стать отправной точкой в будущем).Поэтому, если бы я ссылался на это непосредственно в Postgres, я просто выбрал бы SELECT * FROM mytable или SELECT * FROM mytable WHERE id = 1
-Если столбец [nextitem] не равен нулю, перейдите к целому числу в столбце,Итак, если SELECT * FROM mytable WHERE id = 1 имеет значение '4' в [nextitem], следующий запрос должен быть SELECT * FROM mytable WHERE id = 4.Этот процесс будет повторяться до тех пор, пока [nextitem] не станет равным NULL.
Я использую Python3 на Ubuntu Server 16.04.3 с PostgreSQL 9.6 и psycopg2.
Я считаю, что мне нужно получить значениеиз столбца в переменную, затем разрешите Python передать его для будущего запроса, а не зациклить.
Вот что у меня есть (это требует большой очистки, так как я сделал беспорядокпробуя разные вещи в той области, где я застрял - похоже, мое зависание заключается в том, чтобы отделить данные из запроса в переменную python и передать их обратно):
import psycopg2
try:
connect_str = "dbname='mydatabase' user='myuser' host='localhost' " + \
"password='mypassword'"
# establish a connection
conn = psycopg2.connect(connect_str)
# cursor that to execute queries
cursor = conn.cursor()
# start at the beginning, select the first text field
sql = "SELECT textfield FROM mytable WHERE id=1"
cursor.execute(sql)
rows = cursor.fetchall()
print(rows)
cont = raw_input('Type Accept Continue')
# if user accepts it is ok to proceed, advance to display data from next textfield
if cont=='Accept':
print("Accepted")
sqn = "SELECT textfield, nextitem FROM mytable WHERE id=2"
cursor.execute(sqn)
rows = cursor.fetchall()
print(rows)
result_set = cursor.fetchall()
#ideally, this should grab the integer in the [nextitem] column from last query and select the row corresponding to the integer
for row in result_set:
#print the integer to test the value and make sure it is correct
print "%s" % (row["nextitem"])
#attempt to assign this integer to a variable?
x=["nextitem"]
#attempt feeding the integer previously selected in [nextitem] into the next query
sqv = "SELECT text FROM mytable WHERE id=%s"
cursor.execute(sqv,x)
result = cursor.fetchall()
print(result)
else:
print("Rejected or Not Accepted")
except Exception as e:
print("No Connection Available")
print(e)