Форум сайта python.su
Да, сервер почему-то ругается что нет таблицы, хотя в консоли он ее видит
= selpad()\r\n File “C:\\Work\\Python\\cgi\\cgi-bin\\test8.py”, line 5, in sel
pad\r\n c.execute(\'SELECT id FROM pad where id=1\')\r\nsqlite3.OperationalEr
ror: no such table: pad\r\n'
127.0.0.1 - - CGI script exit status 0x1
Офлайн
Сервер ругается что нет таблицы, хотя в консоли он ее видит
= selpad()\r\n File "C:\\Work\\Python\\cgi\\cgi-bin\\test8.py", line 5, in sel
pad\r\n c.execute(\'SELECT id FROM pad where id=1\')\r\nsqlite3.OperationalEr
ror: no such table: pad\r\n'
127.0.0.1 - - [13/Apr/2017 11:18:47] CGI script exit status 0x1
Офлайн
AnshlagЗначит, файл создаётся пустой, а непустой лежит не там, где смотрит скрипт. Либо полный путь к скрипту укажи, либо правильный относительный.
Да, сервер почему-то ругается что нет таблицы
Офлайн
Точно! Он создавал пустую базу в директории со скриптом которая запускает сервер, а целая база была в папке со скриптом, который нужен для вывода таблицы
Офлайн
А как вывести список? Как-то список надо заполнять? Сейчас возникает ошибка TypeError: ‘NoneType’ object is not subscriptable
import cgi, cgitb, sqlite3
conn = sqlite3.connect('my.db')
c = conn.cursor()
def selpad():
c.execute('SELECT * FROM pad where id=1')
row = c.fetchone()
while row is not None:
print("id:"+str(row[0])+" Наименование: "+str(row[1]) +" | Цена: "
+str(row[2]) +" | Кол-во: "+str(row[3]) +" | Дата: "+str(row[4]))
row = c.fetchone()
out = str(row[1])
return str(out)
print (selpad())
Офлайн
AnshlagЧто-то у тебя неправильный какой-то цикл. Если после цикла берётся out, то зачем он каждый раз перезаписывается в цикле? Порядок рядов в таблице ты не можешь гарантировать, поэтому ты не можешь отлавливать последнюю строку таблицы, например. Так что, скорее всего, это ошибка проектирования цикла. Ну, и сам ряд ты проверяешь где? только в условии цикла, но внутри цикла ты новый ряд берёшь, не проверяя его на содержимое. Когда там возвращается None, он пытается из него взять первый индекс. Так что составь себе сначала план цикла (что он должен делать, когда он должен останавливаться) и только потом его записывай.
Сейчас возникает ошибка TypeError: ‘NoneType’ object is not subscriptable
Отредактировано py.user.next (Апрель 16, 2017 04:40:57)
Офлайн
Да правильнее так. Но теперь данные все в одну строку и я не понял как их вывести в столбец. И как вывести не всю таблицу, а отдельные поля
#!/usr/bin/python
import cgi, cgitb, sqlite3
conn = sqlite3.connect('my.db')
c = conn.cursor()
def selpad():
out = ''
c.execute('SELECT * FROM pad')
row = c.fetchone()
while row is not None:
row = c.fetchone()
out = out + '\n'+str(row)
out = out + '\n'
return out
test = selpad()
print("Content-type: text/html\r\n\r\n")
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print("%s\n" % test)
print ('</body>')
print ('</html>')
Офлайн
AnshlagЕсли исходник страницы откроешь в браузере, то там будет столбец. Просто в html нужно явно делать таблицу.
и я не понял как их вывести в столбец
Отредактировано py.user.next (Апрель 16, 2017 14:50:25)
Офлайн
У меня получилось в браузере в строчку, а в конслоли в столбик, почему так?
в консоли:
<!DOCTYPE HTML>
<html>
<head>
<title>processing form data</title>
</head>
<body>
<h1>Data</h1>
<p>TEXT_1:
(2, 1, 'Молоко', '1', 50, '20.03.2017')
(3, 1, 'Морковь', '3', 15, '20.03.2017')
(4, 2, 'Одиколон', '1', 20, '20.03.2017')
(5, 2, 'Бритва', '1', 35, '20.03.2017')
(6, 3, 'Кино', '1', 300, '20.03.2017')
(7, 1, 'Картофель', '4', 57, '20.03.2017')
(8, 1, 'Сок', '2', 20, '17-03-20')
None</p>
</body>
</html>
Data
(2, 1, 'Молоко', '1', 50, '20.03.2017') (3, 1, 'Морковь', '3', 15, '20.03.2017') (4, 2, 'Одиколон', '1', 20, '20.03.2017') (5, 2, 'Бритва', '1', 35, '20.03.2017') (6, 3, 'Кино', '1', 300, '20.03.2017') (7, 1, 'Картофель', '4', 57, '20.03.2017') (8, 1, 'Сок', '2', 20, '17-03-20') None
import cgi, cgitb, sqlite3
conn = sqlite3.connect('my.db')
c = conn.cursor()
def selpad():
out = ''
c.execute('SELECT * FROM pad')
row = c.fetchone()
while row is not None:
row = c.fetchone()
out = out + '\n'+str(row)
return out
test = selpad()
print("Content-type: text/html\n")
print("""<!DOCTYPE HTML>
<html>
<head>
<title>processing form data</title>
</head>
<body>""")
print("<h1>Data</h1>")
print("<p>TEXT_1: {}</p>".format(test))
print("""</body>
</html>""")
Офлайн
AnshlagИсходник страницы в браузере открой, а не просто смотри в браузере. В исходнике оно будет точно так же на разных строках, но html-разметка не понимает переводов строк и для этого надо html-код писать специальный. Иди почитай что-нибудь для самых маленьких по html'у. Взялся страницу делать, не знаешь ничего.
в браузере:
AnshlagВот это из консоли возьми, сохрани в html-страницу и открой в браузере - и оно будет в одну строчку. Какой тебе питон, если ты html не знаешь.
в консоли:
Отредактировано py.user.next (Апрель 17, 2017 00:13:20)
Офлайн