Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2017 11:21:14

Anshlag
Зарегистрирован: 2017-04-08
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Просмотр базы

Да, сервер почему-то ругается что нет таблицы, хотя в консоли он ее видит

= 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

Офлайн

#2 Апрель 13, 2017 11:22:54

Anshlag
Зарегистрирован: 2017-04-08
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Просмотр базы

Сервер ругается что нет таблицы, хотя в консоли он ее видит

 = 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

Офлайн

#3 Апрель 13, 2017 14:26:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10002
Репутация: +  857  -
Профиль   Отправить e-mail  

Просмотр базы

Anshlag
Да, сервер почему-то ругается что нет таблицы
Значит, файл создаётся пустой, а непустой лежит не там, где смотрит скрипт. Либо полный путь к скрипту укажи, либо правильный относительный.



Офлайн

#4 Апрель 13, 2017 15:03:12

Anshlag
Зарегистрирован: 2017-04-08
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Просмотр базы

Точно! Он создавал пустую базу в директории со скриптом которая запускает сервер, а целая база была в папке со скриптом, который нужен для вывода таблицы

Офлайн

#5 Апрель 15, 2017 18:48:11

Anshlag
Зарегистрирован: 2017-04-08
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Просмотр базы

А как вывести список? Как-то список надо заполнять? Сейчас возникает ошибка 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())

Офлайн

#6 Апрель 16, 2017 04:40:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10002
Репутация: +  857  -
Профиль   Отправить e-mail  

Просмотр базы

Anshlag
Сейчас возникает ошибка TypeError: ‘NoneType’ object is not subscriptable
Что-то у тебя неправильный какой-то цикл. Если после цикла берётся out, то зачем он каждый раз перезаписывается в цикле? Порядок рядов в таблице ты не можешь гарантировать, поэтому ты не можешь отлавливать последнюю строку таблицы, например. Так что, скорее всего, это ошибка проектирования цикла. Ну, и сам ряд ты проверяешь где? только в условии цикла, но внутри цикла ты новый ряд берёшь, не проверяя его на содержимое. Когда там возвращается None, он пытается из него взять первый индекс. Так что составь себе сначала план цикла (что он должен делать, когда он должен останавливаться) и только потом его записывай.



Отредактировано py.user.next (Апрель 16, 2017 04:40:57)

Офлайн

#7 Апрель 16, 2017 11:06:36

Anshlag
Зарегистрирован: 2017-04-08
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Просмотр базы

Да правильнее так. Но теперь данные все в одну строку и я не понял как их вывести в столбец. И как вывести не всю таблицу, а отдельные поля

#!/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>')

Офлайн

#8 Апрель 16, 2017 14:50:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10002
Репутация: +  857  -
Профиль   Отправить e-mail  

Просмотр базы

Anshlag
и я не понял как их вывести в столбец
Если исходник страницы откроешь в браузере, то там будет столбец. Просто в html нужно явно делать таблицу.



Отредактировано py.user.next (Апрель 16, 2017 14:50:25)

Офлайн

#9 Апрель 16, 2017 18:56:10

Anshlag
Зарегистрирован: 2017-04-08
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Просмотр базы

У меня получилось в браузере в строчку, а в конслоли в столбик, почему так?

в консоли:

<!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>""")

Офлайн

#10 Апрель 17, 2017 00:11:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10002
Репутация: +  857  -
Профиль   Отправить e-mail  

Просмотр базы

Anshlag
в браузере:
Исходник страницы в браузере открой, а не просто смотри в браузере. В исходнике оно будет точно так же на разных строках, но html-разметка не понимает переводов строк и для этого надо html-код писать специальный. Иди почитай что-нибудь для самых маленьких по html'у. Взялся страницу делать, не знаешь ничего.

Anshlag
в консоли:
Вот это из консоли возьми, сохрани в html-страницу и открой в браузере - и оно будет в одну строчку. Какой тебе питон, если ты html не знаешь.



Отредактировано py.user.next (Апрель 17, 2017 00:13:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version