Crossin的编程教室

标题: Python 实战(2):简单的数据库 [打印本页]

作者: crossin先生    时间: 2015-4-12 11:37
标题: Python 实战(2):简单的数据库
someweb-02.png
上一次,我们已经在网页上显示出了我们要的影片信息。只是,这些信息是我直接在代码中用 dict 变量来定义的。试想以后网站要包含成千上万条影片信息,需要时常更新,并且当网站运行中断、重启之后仍然能保存之前的信息状态,通过这种方式肯定是难以满足的。一种办法是通过文件存储,将影片信息转成文本或通过“序列化”的方式保存在文件中(微信回复 33、65 可以查看相关文章)。但当数据量较大之后,直接通过文件读写和处理数据将会是一件非常复杂且耗时的操作,因此无法真正用来作为网站的数据存储。这时候,你就需要一个数据库来解决你的问题。

常见的数据库有 MySQL、Oracle、SQL Server、DB2、ACCESS 等等,虽然种类繁多,但其原理大都是相通的。在本项目中,我打算选择一款简单的数据库 -- SQLite。Linux 和较新版的 Mac 系统都默认装有 SQLite,Windows 下的安装也不复杂,另外 Python 2.7 直接带有对 SQLite 的支持,无需再安装其他模块。所以对于入门数据库,或者做一些小项目来说,SQLite 是个不错的选择。

我现在将创建一个叫做 MovieSite.db 的数据库,用来作为电影网站的数据存储。在命令行下输入:

sqlite3 MovieSite.db

如果你系统里的 sqlite 已正常安装,将会看到提示符变成

sqlite>

这表示你已进入 sqlite 的控制台。注意,你运行 sqlite3 时所在的目录将会决定你创建的数据库文件所在位置,文件名就是你定的数据库名。你需要至少创建一张表,这个数据库才会被创建并保存。

所谓一张表,指的是数据库存储一组数据的结构,你可以把它想象成一张 excel 的列表。这个表会有很多列属性,每一条数据就是表里的一行。这里我只粗略地介绍一下使用,深入的了解数据库请参考相关书籍。

在 SQLite 的控制台下输入:

create table movie (title, year, country, abstract);

这条命令将建立一张叫做 movie 的表,表的结构是 4 列属性,分别用来记录电影的标题、年份、国家、简介。

再通过命令向刚刚建立的表里添加一些数据:

insert into movie values ('阿甘正传', 1994, '美国', 'Life is like a box of chocolates.');
insert into movie values ('肖申克的救赎', 1994, '美国', 'Hope is a good thing.');

类似 create table、insert into 这类以 ; 结尾的命令被称作 SQL 语句,它们是数据库的通用操作。通过它们你可以创建表、增删改查数据等等。在输入的时候,务必注意要使用英文半角符号。

而 SQLite 还提供了一些操作,输入

.help

可以查看这些命令。注意这些命令前面都有一个英文点号。

.databases 查看当前的数据库列表,.tables 查看当前的表,.quit 退出控制台。

现在,你可以输入查询语句

select * from movie;

查看刚刚添加到 movie 表中的所有数据。

确认数据库的表中已经有了我们想要的数据之后,接下来要解决的就是如何从网站程序中调用这些数据。

web.py 连接 SQLite 很简单,只需要一行语句:

db = web.database(dbn='sqlite', db='MovieSite.db')

现在可以把先前程序中定义的 movies 变量给去掉了,然后将 GET 方法修改为:

def GET(self):
    movies = db.select('movie')
    return render.index(movies)

同之前一样,刷新网页,你将看到和上次一样的页面。只不过现在的数据来源于 SQLite 的数据库中。

修改一下模板,加上两项新属性

$movie['country'], $movie['abstract']

让页面显示更多信息。

为了让创建数据库的过程更加方便,通常会将之前我们使用的 SQL 语句写在一个文件里。比如,创建一个 tables.sql 的文件,在里面写上:

create table movie (title, year, country, abstract);

insert into movie values ('阿甘正传', 1994, '美国', 'Life is like a box of chocolates.');
insert into movie values ('肖申克的救赎', 1994, '美国', 'Hope is a good thing.');

然后在 SQLite 控制台下输入命令:

.read tables.sql

就可以一次性完成之前的建表和添加数据的操作。因此,当下次想要修改数据库的时候,一种简单粗暴的方法就是,删除 MovieSite.db 文件,修改 tables.sql 里的建表语句,然后重新建立数据库,再读取文件重建数据表和其中的数据。

至此,我们已经为这个电影网站加上了数据库。但显然,我不可能手动添加众多电影信息。所以接下来,我需要一些外部的数据源,来扩充这个网站的内容。豆瓣是个好网站,嗯。

someweb-2-code.py (325 Bytes, 下载次数: 417)
someweb-2-index.html (185 Bytes, 下载次数: 344)

someweb-2-tables.sql (1.95 KB, 下载次数: 366)



作者: mliml    时间: 2015-4-13 15:03
期待更新!
作者: 喵小白    时间: 2015-4-14 09:04
代码一样啊。。。。出这个错是什么原因 QQ图片20150414090018.png
作者: 喵小白    时间: 2015-4-14 11:14
喵小白 发表于 2015-4-14 09:04
代码一样啊。。。。出这个错是什么原因

数据库应该加入绝对路径,这个错没有了但是出现了编码错误,如果我不设置默认编码的话错误如下图: QQ截图20150414110839.png
但是加入代码:
  1. #reload(sys)
  2.         #sys.setdefaultencoding("utf-8")
复制代码
又会出现下面的错误
notepad是utf-8格式,到底是为什么呀?????????

QQ截图20150414111255.png (22.91 KB, 下载次数: 467)

QQ截图20150414111255.png


作者: crossin先生    时间: 2015-4-14 11:43
喵小白 发表于 2015-4-14 11:14
数据库应该加入绝对路径,这个错没有了但是出现了编码错误,如果我不设置默认编码的话错误如下图:
但是 ...

没看出你这个是哪里的编码出的问题
要先确定是数据库里编码出了问题,还是你拿到程序里出问题
如果是windows,可以用cp936编码试试
作者: crossin先生    时间: 2015-4-14 13:08
遇到编码问题时,可先换全英文,保证程序能运行。然后再想办法定位编码的问题
作者: 喵小白    时间: 2015-4-14 14:16
crossin先生 发表于 2015-4-14 13:08
遇到编码问题时,可先换全英文,保证程序能运行。然后再想办法定位编码的问题 ...

嗯就是这个原因,谢谢。
作者: musray    时间: 2015-4-17 12:50
教程跟到第三期,我已经打算去申请个域名了
作者: crossin先生    时间: 2015-4-17 17:29
musray 发表于 2015-4-17 12:50
教程跟到第三期,我已经打算去申请个域名了

最近发现了这个免费的python host,打算去研究下,然后用在这个项目上:
https://www.pythonanywhere.com/
作者: blackjw    时间: 2015-5-8 22:29
喵小白 发表于 2015-4-14 11:14
数据库应该加入绝对路径,这个错没有了但是出现了编码错误,如果我不设置默认编码的话错误如下图:
但是 ...

请问数据库如何加入绝对路径,遇到同样的问题。
作者: ami    时间: 2015-5-19 21:44
喵小白 发表于 2015-4-14 14:16
嗯就是这个原因,谢谢。

我也遇到你那个问题,请问怎么解决啊?
作者: csyhhb    时间: 2015-5-21 20:46
喵小白 发表于 2015-4-14 14:16
嗯就是这个原因,谢谢。

你中文编码问题怎么解决的?
作者: 喵小白    时间: 2015-5-25 16:56
csyhhb 发表于 2015-5-21 20:46
你中文编码问题怎么解决的?

这个问题。。。你试试用先生给的sql语句建立db,或者直接使用他给的db。。。要修改的话就在它的基础上修改。。。反正我就是这么做的
作者: 喵小白    时间: 2015-5-25 16:56
ami 发表于 2015-5-19 21:44
我也遇到你那个问题,请问怎么解决啊?

路径改一下
作者: csyhhb    时间: 2015-5-25 17:41
喵小白 发表于 2015-5-25 16:56
这个问题。。。你试试用先生给的sql语句建立db,或者直接使用他给的db。。。要修改的话就在它的基础上修 ...

这问题我解决的了,是我的.sql 的文本编码格式是ANSI,改成UTF-8保存就可以了
作者: 喵小白    时间: 2015-5-25 19:08
csyhhb 发表于 2015-5-25 17:41
这问题我解决的了,是我的.sql 的文本编码格式是ANSI,改成UTF-8保存就可以了 ...

嗯~~~~~~明白了
作者: 煞笔小七    时间: 2015-6-1 11:48
喵小白 发表于 2015-4-14 14:16
嗯就是这个原因,谢谢。

Windows下html的文件编码也要为utf-8,否则页面里有中文就会显示type 'exceptions.UnicodeDecodeError报错

Windows真逆天(눈_눈)
作者: 喵小白    时间: 2015-6-2 18:47
煞笔小七 发表于 2015-6-1 11:48
Windows下html的文件编码也要为utf-8,否则页面里有中文就会显示type 'exceptions.UnicodeDecodeError报 ...

总是出现意想不到的问题2333
作者: pilipala2357    时间: 2015-7-25 12:18
csyhhb 发表于 2015-5-25 17:41
这问题我解决的了,是我的.sql 的文本编码格式是ANSI,改成UTF-8保存就可以了 ...

奇怪,我直接把这个文件改成了UTF-8编码保存,然后在sqlite控制台输入.read语句,就报错,一堆乱码。先生给的那个sql文件可以read出来,但是我一改又扑街了。。。请问你是就直接把sql文件用text打开,然后另存为,保存为utf-8编码,文件里的内容就是文章中的create和insert语句,是这样吗?

作者: pilipala2357    时间: 2015-7-25 13:00
老师,为什么把sql文件变为utf8编码的,sqlite无法阅读,如果不用utf8编码的,网页又会报错。我下载了你的sql文件倒是可以读出来,可是一改内容,又乱码了。请问老师,这个中文编码的问题到底要怎么解决??都纠结两三天了= =

2.png (9.71 KB, 下载次数: 325)

2.png


作者: crossin先生    时间: 2015-7-25 22:21
pilipala2357 发表于 2015-7-25 13:00
老师,为什么把sql文件变为utf8编码的,sqlite无法阅读,如果不用utf8编码的,网页又会报错。我下载了你的s ...

有可能是因为windows下的控制台不能显示utf编码。所以如果utf8编码正常的话,你可以看看能不能用其他sqlite的客户端来查看数据库,而不用在控制台下看
作者: crossin先生    时间: 2015-7-25 22:23
pilipala2357 发表于 2015-7-25 13:00
老师,为什么把sql文件变为utf8编码的,sqlite无法阅读,如果不用utf8编码的,网页又会报错。我下载了你的s ...

不过你截图上的这个问题好像是因为用了 带BOM的UTF8,这个会在文件前加上一个BOM头,导致读入数据库的时候解析错误。要换成 无BOM的UTF8。直接用windows的文本编辑器应该不行,用notepad++之类的

作者: pilipala2357    时间: 2015-7-30 13:43
crossin先生 发表于 2015-7-25 22:23
不过你截图上的这个问题好像是因为用了 带BOM的UTF8,这个会在文件前加上一个BOM头,导致读入数据库的时 ...

的确是文本编辑器的原因,现在已经解决了!!谢谢先生!!O(∩_∩)O~~
作者: hipeter    时间: 2015-11-16 21:27
喵小白 发表于 2015-4-14 11:14
数据库应该加入绝对路径,这个错没有了但是出现了编码错误,如果我不设置默认编码的话错误如下图:
但是 ...

请问怎么在数据库加入绝对路径? 我在安装SQlite的时候已经把它的路径加入PATH里了。我试着在.py文件里加入绝对路径,但也会报错。
作者: hipeter    时间: 2015-11-17 15:01
hipeter 发表于 2015-11-16 21:27
请问怎么在数据库加入绝对路径? 我在安装SQlite的时候已经把它的路径加入PATH里了。我试着在.py文件里加 ...

可以了。db = web.database(dbn='sqlite', db='C:\sqlite\MovieSite.db')
作者: Gobay    时间: 2016-3-25 22:07
本帖最后由 Gobay 于 2016-3-25 22:08 编辑

先生,加入了绝对路径还是出现首页的问题,应该怎么debug呢?我也是用的ubuntu, 谢谢
作者: crossin先生    时间: 2016-3-26 12:28
blackjw 发表于 2015-5-8 22:29
请问数据库如何加入绝对路径,遇到同样的问题。

哪个问题,找不到数据库吗?这个好像没有特别debug的方法,就是根据错误提示,确认是不是没找到路径,然后再确认对应的路径是不是有问题
作者: Gobay    时间: 2016-3-26 19:43
crossin先生 发表于 2016-3-26 12:28
哪个问题,找不到数据库吗?这个好像没有特别debug的方法,就是根据错误提示,确认是不是没找到路径,然 ...

重新开启后就成功了。谢谢!
另外想问先生,从数据库里取出数据后能制定成某种格式么?比如取出的raw的格式如果是[dict(db.select('data'))] --> [{'producct': 'name'}] 但是想转化成 ['product1: name1', 'product2: name2',...],因为还想嵌入另一层web.py的func里
作者: crossin先生    时间: 2016-3-27 14:41
Gobay 发表于 2016-3-26 19:43
重新开启后就成功了。谢谢!
另外想问先生,从数据库里取出数据后能制定成某种格式么?比如取出的raw的格 ...

这得自行加代码做转换
作者: Gobay    时间: 2016-4-5 22:05
crossin先生 发表于 2016-3-27 14:41
这得自行加代码做转换

谢谢先生。之前的问题我解决了,弃用了数据库,直接创建table.py 文件然后用 from table.py import table
但是想请问如何让html里的下拉菜单是从sqlite里导出的数据呢?如何连接?
作者: crossin先生    时间: 2016-4-6 10:46
Gobay 发表于 2016-4-5 22:05
谢谢先生。之前的问题我解决了,弃用了数据库,直接创建table.py 文件然后用 from table.py import table ...

还是跟项目例子里类似,后台从数据库里取出数据集,传给模板,在模板里设置下拉菜单。只不过例子里是在模板里把数据处理成一个文本来显示,你这里要多加一些标签,让它成为下拉菜单
作者: tianqi2008    时间: 2016-4-12 15:56
基础不行,弄了好久这个数据库,还好最后在这么多前辈们宝贵经验下少走弯路,要输绝对路径啊,一开始我在C:\sqlite  怎么一直没有MOVIEdb文件呢?原来是在默认C:\Users\Administrator这里


话说 <web.utils.IterBetter instance at 0x000000000308EDC8> 是什么实例?

UC截图20160412155108.jpg (22.57 KB, 下载次数: 297)

UC截图20160412155108.jpg


作者: crossin先生    时间: 2016-4-12 22:54
tianqi2008 发表于 2016-4-12 15:56
基础不行,弄了好久这个数据库,还好最后在这么多前辈们宝贵经验下少走弯路,要输绝对路径啊,一开始我在C: ...

是个用于循环的迭代器,你这里是直接把select的返回值直接显示出来,所以有这个吧。
作者: Joshtu    时间: 2016-6-28 14:59
本帖最后由 Joshtu 于 2016-6-28 15:13 编辑
hipeter 发表于 2015-11-17 15:01
可以了。db = web.database(dbn='sqlite', db='C:\sqlite\MovieSite.db')

改了是可以了,又报错: <class 'sqlite3.OperationalError'> at /

unable to open database file
[img]file:///C:\Users\Josh\AppData\Roaming\Tencent\Users\36177228\QQ\WinTemp\RichOle\SY8ILG9UVHT[Y3{(86%FW2U.png[/img]

QQ图片20160628151250.png (27.06 KB, 下载次数: 281)

unable open database

unable open database


作者: woshizhaofang    时间: 2016-11-2 10:22
喵小白 发表于 2015-4-14 14:16
嗯就是这个原因,谢谢。

我也是遇到同样的问题,把数据库里存储的值都换成英文就好了。。。。
作者: feng    时间: 2016-11-6 10:33
woshizhaofang 发表于 2016-11-2 10:22
我也是遇到同样的问题,把数据库里存储的值都换成英文就好了。。。。

怎么换呢?求指教
作者: feng    时间: 2016-11-6 10:41
本帖最后由 feng 于 2016-11-6 10:42 编辑

已经到这一步了:


加入更多列的信息后就出错了/:

捕获1.PNG (28.01 KB, 下载次数: 314)

捕获1.PNG

捕获2.PNG (24.44 KB, 下载次数: 309)

error的

error的


作者: crossin先生    时间: 2016-11-6 22:07
feng 发表于 2016-11-6 10:41
已经到这一步了:

把具体报错发上来
作者: feng    时间: 2016-11-8 10:01
本帖最后由 feng 于 2016-11-8 10:05 编辑
crossin先生 发表于 2016-11-6 22:07
把具体报错发上来

好的,报错截图如下:


查询数据库MovieSite.db得到:


error.PNG (106.61 KB, 下载次数: 323)

添加index.heml里$movie['country']时得到的

添加index.heml里$movie['country']时得到的

数据库.PNG (13.24 KB, 下载次数: 310)

可以看到数据库里有country字段,并且我换成了英文输入

可以看到数据库里有country字段,并且我换成了英文输入


作者: crossin先生    时间: 2016-11-8 14:51
feng 发表于 2016-11-8 10:01
好的,报错截图如下:

从提供的这些信息还是没法看出来。
有可能的情况:
1 如果你的html文件是用windows默认记事本保存的,换成其他编辑器如sublime、notepad++等,用utf8或utf8无BOM格式重新保存
2 检查下,$['等符号是不是都是英文符号,添加数据库里数据有没有直接从网上复制了特殊符号进去
作者: feng    时间: 2016-11-29 13:33
你好,用.read tables.sql 创建数据库后  怎么查询数据库呢?我查不到

捕获.PNG (49.74 KB, 下载次数: 306)

11

11


作者: crossin先生    时间: 2016-11-29 14:24
feng 发表于 2016-11-29 13:33
你好,用.read tables.sql 创建数据库后  怎么查询数据库呢?我查不到

你打开sqlite3要指定数据库的:
sqlite3 MovieSite.db

不然每次都是新建库
作者: feng    时间: 2016-12-1 12:38
crossin先生 发表于 2016-11-29 14:24
你打开sqlite3要指定数据库的:
sqlite3 MovieSite.db

谢谢额
作者: shmxz1989    时间: 2017-1-30 10:55
本帖最后由 shmxz1989 于 2017-1-30 11:38 编辑

请教各位大神,sqlite控制台下输入.read tables.sql  为何总是提示cannot open “tables.sql”.
我是在win7系统下,用的notepad++创建的tables.sql文件,放在c:\sqlite目录下。反复重新创建了几次,都一样的结果

11.JPG (47.94 KB, 下载次数: 307)

11.JPG

捕获.JPG (42.75 KB, 下载次数: 303)

捕获.JPG

22.JPG (45.51 KB, 下载次数: 341)

22.JPG


作者: crossin先生    时间: 2017-1-30 13:20
shmxz1989 发表于 2017-1-30 10:55
请教各位大神,sqlite控制台下输入.read tables.sql  为何总是提示cannot open “tables.sql”.
我是在win7 ...

你的sqlite不是在那个目录打开的啊,你看你打开时候的路径是 c:\users\administrator
所以你要么用table.sql的完整路径,要么先从控制台进入那个目录,再打开 sqlite3
作者: shmxz1989    时间: 2017-1-30 19:37
crossin先生 发表于 2017-1-30 13:20
你的sqlite不是在那个目录打开的啊,你看你打开时候的路径是 c:%users\administrator
所以你要么用table. ...

感谢C大指教,我把tables.sql 复制到了Administrator下,果然解决了。郁闷了一天一夜的问题干掉了,心里舒坦了,哈哈哈!自学菜鸟一枚,基础太薄弱,还需继续努力啊~ 再次感谢C大,今天大年初三,顺祝C大和各位坛友新年大吉大利,好运连连!
作者: crossin先生    时间: 2017-1-31 10:54
shmxz1989 发表于 2017-1-30 19:37
感谢C大指教,我把tables.sql 复制到了Administrator下,果然解决了。郁闷了一天一夜的问题干 ...


作者: Asgarder    时间: 2017-2-17 15:21
老师,我想问一下这个报错是怎么回事?
捕获.JPG
作者: crossin先生    时间: 2017-2-18 17:06
Asgarder 发表于 2017-2-17 15:21
老师,我想问一下这个报错是怎么回事?

你的index模板文件里有定义变量吗?没有变量的话,就不要传movies进去
作者: Asgarder    时间: 2017-2-18 17:30
crossin先生 发表于 2017-2-18 17:06
你的index模板文件里有定义变量吗?没有变量的话,就不要传movies进去

我试了一下,果然可以了,多谢老师
作者: baorunxue    时间: 2017-2-25 11:48
我数据库加入了绝对路径,遇到同样问题。
作者: crossin先生    时间: 2017-2-25 22:11
baorunxue 发表于 2017-2-25 11:48
我数据库加入了绝对路径,遇到同样问题。

具体问题具体分析,有时候同样问题,原因未必一样。

你可以把信息都发上来,包括文件夹情况、代码、运行输出
作者: nekonekobox    时间: 2017-3-4 22:49
有几个注意事项自己踩到的,不过也通过努力解决了,希望给遇到同样问题的朋友一点帮助
1、windows系统的朋友,要安装sqlite3才能在命令行里操作sqlite语句
安装方法可以参考下文:
http://blog.csdn.net/chaishen10000/article/details/54574060
2、注意编码问题,这个踩了好多次坑
如果习惯使用utf-8编码的朋友,记得将sql文件也保存为utf-8无BOM编码方式

作者: nekonekobox    时间: 2017-3-5 00:02
csyhhb 发表于 2015-5-21 20:46
你中文编码问题怎么解决的?

中文编码解决了,html文件用ANSI编码格式,py文件用utf-8
作者: crossin先生    时间: 2017-3-5 01:02
nekonekobox 发表于 2017-3-5 00:02
中文编码解决了,html文件用ANSI编码格式,py文件用utf-8

不错
作者: 631250005    时间: 2017-6-26 17:20
喵小白 发表于 2015-4-14 11:14
数据库应该加入绝对路径,这个错没有了但是出现了编码错误,如果我不设置默认编码的话错误如下图:
但是 ...

终于找到问题了请参考我这个写
db = web.database(dbn='sqlite', db='C:\Users\Administrator\MovieSite.db')

C:\Users\Administrator\MovieSite.db 换成你自己MovieSite.db的目录即可!!!

作者: 631250005    时间: 2017-6-26 17:21
终于找到问题了请参考我这个写db = web.database(dbn='sqlite', db='C:\Users\Administrator\MovieSite.db')C:\Users\Administrator\MovieSite.db 换成你自己MovieSite.db的目录即可!!!
作者: 13253620252    时间: 2017-11-16 18:56
先生,我安装的时候是Python2.7,不是说不用安装其他模块了吗?但是为什么在命令行输入时会报错,是不是没有安装sqlite3啊?

捕获.PNG (4.73 KB, 下载次数: 278)

捕获.PNG


作者: crossin先生    时间: 2017-11-17 10:07
13253620252 发表于 2017-11-16 18:56
先生,我安装的时候是Python2.7,不是说不用安装其他模块了吗?但是为什么在命令行输入时会报错,是不是没 ...
Linux 和较新版的 Mac 系统都默认装有 SQLite,Windows 下的安装也不复杂


哪里有说不用安装,你再读一下呢……
python自带sqlite模块,sqlite软件本身你要装啊
作者: 13253620252    时间: 2017-11-17 19:41
crossin先生 发表于 2017-11-17 10:07
哪里有说不用安装,你再读一下呢……
python自带sqlite模块,sqlite软件本身你要装啊 ...

好尴尬,理解错了,还以为是不用安装了呢
作者: 13253620252    时间: 2017-11-18 13:42
先生,这是为什么出错呢

捕获.PNG (6.8 KB, 下载次数: 216)

捕获.PNG


作者: crossin先生    时间: 2017-11-18 16:31
13253620252 发表于 2017-11-18 13:42
先生,这是为什么出错呢

你已经进入 sqlite3 了,怎么又在里面执行 sqlite3 命令
作者: 13253620252    时间: 2017-11-18 19:03
crossin先生 发表于 2017-11-18 16:31
你已经进入 sqlite3 了,怎么又在里面执行 sqlite3 命令

哦哦,傻了
作者: 变色幽灵    时间: 2017-12-25 21:49
问题:直接在sql窗口创建了数据表movie,insert了两条数据,select也没问题。但是在0.0.0.0:8080上报错,在上一步还是正常可以显示电影信息。
具体如图:index.html的代码,py文件的代码,但是执行后提示:OperationalError: no such table: movie(是看这个错误么?)
WX20171225-213545@2x.png

然而再次检查数据库和表正常:
WX20171225-214803@2x.png

在运行网页的时候,报错:
WX20171225-214858.png

ps:像这种网页的报错,主要看哪里呢?


作者: crossin先生    时间: 2017-12-26 10:16
你用的db应该是项目下的文件,不是根目录这个
作者: zjj1028    时间: 2018-1-1 13:54
输出时,报如下错误,怎么解决呢?

  File "C:\ptn\lib\site-packages\web.py-0.40.dev0-py3.6.egg\web\db.py", line 1035, in import_driver
    raise ImportError("Unable to import " + " or ".join(drivers))
ImportError: Unable to import sqlite3 or pysqlite2.dbapi2 or sqlite

作者: crossin先生    时间: 2018-1-1 14:13
比较奇怪的报错,无法看出问题。是不是你有文件命名冲突了
作者: zjj1028    时间: 2018-1-1 14:25
crossin先生 发表于 2018-1-1 14:13
比较奇怪的报错,无法看出问题。是不是你有文件命名冲突了

应该没有吧,。。我再看看
作者: qiqibaoer    时间: 2018-2-5 12:02
数据库的绝对路径是这样加吗?

07285200-8E54-4fe7-9CFF-EDC8AB58F2EF.png (108.56 KB, 下载次数: 203)

07285200-8E54-4fe7-9CFF-EDC8AB58F2EF.png


作者: qiqibaoer    时间: 2018-2-5 12:05
<class 'AttributeError'> at /
'NoneType' object has no attribute 'name'

Python        <frozen importlib._bootstrap> in _exec, line 599
Web        GET http://127.0.0.1:8080/


这是个啥原因
作者: crossin先生    时间: 2018-2-5 14:40
qiqibaoer 发表于 2018-2-5 12:05
at /
'NoneType' object has no attribute 'name'

你看你哪里用到name了,那个对象是个空值
作者: 2894386560    时间: 2018-5-8 21:54
额,比较好奇先生给的模板里面
<br/>$movie['abstract']<br/>        <br/>
这里面的<br/>是什么作用啊?
<br/>是换行,“<br/>     <br/>”是空一行,是这个意思吗?
作者: crossin先生    时间: 2018-5-9 00:03
2894386560 发表于 2018-5-8 21:54
额,比较好奇先生给的模板里面
$movie['abstract']        
这里面的是什么作用啊?

只是空两行。

你看到的那个,应该是到windows上代码里的换行没起作用
html代码里本身的空格、换行都不影响页面效果
作者: 2894386560    时间: 2018-5-9 21:02
crossin先生 发表于 2018-5-9 00:03
只是空两行。

你看到的那个,应该是到windows上代码里的换行没起作用

谢谢C大
作者: Vicky-奥利奥    时间: 2018-5-11 16:18
本帖最后由 Vicky-奥利奥 于 2018-5-11 16:27 编辑

请问出现这个错误怎么解决啊?

C:\Users\HuangYanQun\Desktop\1.png

1.png (75.03 KB, 下载次数: 286)

1.png

2.png (17.26 KB, 下载次数: 274)

2.png


作者: crossin先生    时间: 2018-5-11 22:18
Vicky-奥利奥 发表于 2018-5-11 16:18
请问出现这个错误怎么解决啊?

我也没看出哪里有问题

你试试用帖子里的代码,然后通过命令行启动程序看看是否可以
作者: 少年与猫.    时间: 2018-5-30 19:41
本帖最后由 少年与猫. 于 2018-5-30 19:43 编辑

运行的时候一直打不开数据库

CH9MM_WV{KY8`U4{JLU1GWT.png (12.08 KB, 下载次数: 290)

CH9MM_WV{KY8`U4{JLU1GWT.png


作者: crossin先生    时间: 2018-5-31 00:20
少年与猫. 发表于 2018-5-30 19:41
运行的时候一直打不开数据库

文件放的地址不对吧,settings里也查一查
作者: boat    时间: 2019-8-15 17:33
本帖最后由 boat 于 2019-8-15 17:34 编辑

数据库用的MySQL,用了pymysql来连接数据库
遇到的问题是mysql里读取tables.sql时,出现问题fail to open,ERROR 22
把'\'改成'\\'还是会出现错误,但是数据写进去了。

作者: delapi    时间: 2019-10-14 05:39
请问如果我用的是微软access数据库,db = web.database(dbn=后面应该写什么,我试了几种,都是说unknown db
作者: crossin先生    时间: 2019-10-14 14:38
delapi 发表于 2019-10-14 05:39
请问如果我用的是微软access数据库,db = web.database(dbn=后面应该写什么,我试了几种,都是说unknown db ...

不支持。
数据库支持 mysql 和 Postgres,而且需要装对应的库,并不是写个名字就自动可以的

文档里有
http://webpy.org/docs/0.3/tutorial.zh-cn#databasing
作者: xiaozhiamy    时间: 2019-12-23 22:35
用.read tables.sql命令建立的MovieSite.db大小为0KB,但是用select * from movie;却可以查到数据是什么原因呢?

作者: xiaozhiamy    时间: 2019-12-23 22:42
在D:\sqlite下,放入tables.sql,然后在 SQLite 控制台下输入命令:
.read tables.sql

之后看到:
可查询到有movie表格

数据库MovieSite.db大小为0KB?

数据库大小为0KB很奇怪

然后在程序中用db=web.database(dbn=‘sqlite’,db=‘D:\sqlite\MovieSite.db’)调用
代码中调用路径也写对了.PNG

会提示:

提示找不到movie
一直找不到原因?请教一下各位 多谢了
————————————————
版权声明:本文为CSDN博主「xiaozhiamy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaozhiamy/article/details/103674635


作者: crossin先生    时间: 2019-12-23 23:43
xiaozhiamy 发表于 2019-12-23 22:42
在D:\sqlite下,放入tables.sql,然后在 SQLite 控制台下输入命令:
.read tables.sql

sqlite3 MovieSite.db




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5