Форум сайта python.su
Написал использовать кодировку utf-8
1) Скрипт создания базы данных в третьей колонке значение русскими буквами
# -*- coding: utf-8 -*-
import sqlite3
con = sqlite3.connect('books.db')
cur = con.cursor()
cur.execute('CREATE TABLE books (id INTEGER PRIMARY KEY, title VARCHAR(100), author VARCHAR(30))')
cur.execute('INSERT INTO books (id, title, author) VALUES(1, “Mathematics”, “Иванов”)')
cur.execute('INSERT INTO books (id, title, author) VALUES(2, “lirika”, “Петров”)')
cur.execute('INSERT INTO books (id, title, author) VALUES(3, “Astronomija”, “Сидоров”)')
con.commit()
cur.close()
2) Скрипт добавления и просмотра:
# -*- coding: utf-8 -*-
import string,cgi,sqlite3
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
page0=“”“
<b>menu</b><rb>
<form action=”“ method=”post“ > <input type=”submit“ value=”send post“ > </form>
<form action=”sql“ method=”get“ > <input type=”submit“ value=”books base“ > </form>
”“”
page_start=“”“
<b>books</b><br>
<table border=1 width=600> <tr><td><b>id</b></td><td><b>title</b></td><td><b>author</b></td></tr>
”“”
page_end=“”“
</table>
<form action=”sql“ method=”get“ > <input type=”submit“ value=”show all“ > </form>
<form action=”send_select“ method=”get“ > id: <input name=”id“ type=text size=3> <input type=”submit“ value=”select“ > </form>
<form action=”send_delete“ method=”get“ > id: <input name=”id“ type=text size=3> <input type=”submit“ value=”delete“ > </form>
<form action=”send_put“ method=”get“ > id: <input name=”id“ type=text> title: <input name=”title“ type=text> author: <input name=”author“ type=text> <input type=”submit“ value=”put“ > </form>
”“”
def show_base(self):
page=page_start
con = sqlite3.connect('books.db')
cur = con.cursor()
cur.execute('SELECT * FROM books')
for row in cur: page+='<tr><td>'+str(row)+'</td><td>'+row+'</td><td>'+row+'</td><tr>'
page+=page_end
cur.close()
self.wfile.write(page)
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
plist = self.path.split(“?”)
self.send_response(200)
self.send_header('Content-type', ‘text/html’)
self.end_headers()
if plist=='/' : self.wfile.write(page0)
if plist=='/send_put' :
pl=plist.split(“&”) #split values
l1=pl.split('=') #get id value
l2=pl.split('=') #get title value
l3=pl.split('=') #get author value
data=(l1,l2,l3)
con = sqlite3.connect('books.db')
cur = con.cursor()
cur.execute('INSERT INTO books (id, title, author) VALUES(?, ?, ?)',data)
con.commit()
cur.close()
show_base(self)
if plist=='/sql' : show_base(self)
def main():
server = HTTPServer(('', 80), MyHandler)
print ‘started httpserver…’
server.serve_forever()
if __name__ == ‘__main__’:
main()
Вопрос: 1) Почему при запуске второго скрипта он ругается на кодировку русских букв и не показывает базу данных? (Если в третьей колонке ввести англискими буквами то все отображается).
2) Как сделать чтобы в базу данных можно было добавлять и читать из неё значения колонок занесенные русскими буквами?
Офлайн
1. Потому-что sqlite по умолчанию возвращает все строки в unicode, а тебе нужна конкретная кодировка.
2. Сделать очень просто:
con = sqlite3.connect('books.db')
con.text_factory = str
self.send_header('Content-type', 'text/html; charset=UTF-8')
Отредактировано (Июль 19, 2009 02:54:19)
Офлайн
Спасибо
Офлайн