页面载入中...
首页 » Tag ‘数据库’

PyQt程序编译后的数据库驱动问题

舍得按:这个问题困住舍得蛮长的一段时间了。在用cx-freeze对写完的程序进行编译的时候,舍得发现,程序居然无法正常打开数据库!直到今晚,按脑中突然冒出的一个念头试了一下,发现解决问题的方法竟然是如此滴简单。

先介绍一下问题的背景:在舍得写的这个程序中要用到Qt自带的MySQL驱动,在本地调试的时候,一切正常,数据可以随心所欲滴读取、写入。可一旦用cx-freeze对程序进行编译后,杯具发生,数据库就再也打不开了。

难道是cx-freeze出了错?

还是,根本没法酱紫调用数据库?那写好的程序只能带着Python的环境运行了?

舍得有一个优点是会去想各种各样的“可能”的解决办法,然后一一尝试。哪怕可能性很低很低,只要尝试的成本没有超出舍得的忍耐程度,那——还是会去试。

就这样一个个方案试过去,直到找到答案:

你要调用哪个数据库的驱动,先在程序目录下新建一个叫”sqldrivers“的文件夹,然后把那个驱动(通常放在"Python安装目录\Lib\site-packages\PyQt4\plugins\sqldrivers下,例如舍得要用到MySQL的驱动,就复制qsqlmysql4.dll")复制过来,放到这个文件夹下。然后就没有然后了,直接运行编译好的程序,你会发现数据库正常了。

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:舍得@学习力博客

SuperMemo UX数据库中的日期格式转换

打开SuperMemo UX的数据库,我们会发现其中的日期并没有用常见的"年-月-日"的格式,而是用了一个int值,这个值通常是5位数左右,它表示从1970年1月1日起的天数,对UX程序来讲,这样的储存方式便于计算时间间隔,而当你要以日期格式来表现的时候,只要处理一下就可以了。

舍得以python为例,讲解一下日期的格式转换:

比如我们要转换15517这个值,这里要用到fromordinal这个函数,下面是代码

def getdate(self,  date):
    __s_date = datetime.date(1970, 1, 1).toordinal()   #取1970年1月1日的ordinal值
    d = datetime.date.fromordinal(__s_date + date)   #加上传进来的以int表示的日期
    return d.strftime("%Y-%m-%d")   #返回"年-月-日"格式的日期

这样我们只要调用getdate就可以得到日期,如:

print(self.getdate(15517))

结果为:

>>>2012-06-26

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:
舍得
首发:
舍得@学习力博客