Найти - Пользователи
Полная версия: Просмотр базы
Начало » Python для новичков » Просмотр базы
1 2 3
Anshlag
Да, сервер почему-то ругается что нет таблицы, хотя в консоли он ее видит

= 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
Anshlag
Сервер ругается что нет таблицы, хотя в консоли он ее видит

 = 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
py.user.next
Anshlag
Да, сервер почему-то ругается что нет таблицы
Значит, файл создаётся пустой, а непустой лежит не там, где смотрит скрипт. Либо полный путь к скрипту укажи, либо правильный относительный.
Anshlag
Точно! Он создавал пустую базу в директории со скриптом которая запускает сервер, а целая база была в папке со скриптом, который нужен для вывода таблицы
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())
py.user.next
Anshlag
Сейчас возникает ошибка TypeError: ‘NoneType’ object is not subscriptable
Что-то у тебя неправильный какой-то цикл. Если после цикла берётся out, то зачем он каждый раз перезаписывается в цикле? Порядок рядов в таблице ты не можешь гарантировать, поэтому ты не можешь отлавливать последнюю строку таблицы, например. Так что, скорее всего, это ошибка проектирования цикла. Ну, и сам ряд ты проверяешь где? только в условии цикла, но внутри цикла ты новый ряд берёшь, не проверяя его на содержимое. Когда там возвращается None, он пытается из него взять первый индекс. Так что составь себе сначала план цикла (что он должен делать, когда он должен останавливаться) и только потом его записывай.
Anshlag
Да правильнее так. Но теперь данные все в одну строку и я не понял как их вывести в столбец. И как вывести не всю таблицу, а отдельные поля

#!/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>')
py.user.next
Anshlag
и я не понял как их вывести в столбец
Если исходник страницы откроешь в браузере, то там будет столбец. Просто в html нужно явно делать таблицу.
Anshlag
У меня получилось в браузере в строчку, а в конслоли в столбик, почему так?

в консоли:
<!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>""")
py.user.next
Anshlag
в браузере:
Исходник страницы в браузере открой, а не просто смотри в браузере. В исходнике оно будет точно так же на разных строках, но html-разметка не понимает переводов строк и для этого надо html-код писать специальный. Иди почитай что-нибудь для самых маленьких по html'у. Взялся страницу делать, не знаешь ничего.

Anshlag
в консоли:
Вот это из консоли возьми, сохрани в html-страницу и открой в браузере - и оно будет в одну строчку. Какой тебе питон, если ты html не знаешь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB