免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2560 | 回复: 5
打印 上一主题 下一主题

我的字符串出了什么问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-30 14:28 |只看该作者 |倒序浏览
本帖最后由 luofeiyu_cu 于 2014-05-30 16:21 编辑

select  capital.代码 as code,quote.close as close, quote.close*capital.股份总数/10000 as market_cap,     
        balance.负债合计/balance.资产总计 as debt_ratio,                                                        
        profit.归属于母公司所有者的净利润/balance.'所有者权益(或股东权益)合计' as roe,            
        profit.归属于母公司所有者的净利润/balance.'负债和所有者权益(或股东权益)总计' as roa ,                  
        quote.close*capital.股份总数/profit.归属于母公司所有者的净利润 as pe,                                   
        quote.close*capital.股份总数/balance.资产总计  as pb                                                     
        from profile,capital,quote,balance,profit                                                               
        where capital.代码=300001
        and profile.代码=capital.代码  
        and profile.代码=quote.code   
        and profile.代码=balance.代码
        and profile.代码=profit.代码  
        and quote.date="20140523"     
        and balance.报告日期="20131231"      
        and profit.报告日期="20131231";

这一串string,可以顺利地查询sqlite数据库,可是我写成下面的方式,就无法得出结果。


# -*- coding: utf-8 -*-
import os,re,sqlite3
db_name='china.sqlite'
target_dir='e:\\workspace\\data\\'
con = sqlite3.connect(target_dir+db_name)
cur=con.cursor()
select_str='''select  capital.代码 as code,quote.close as close, quote.close*capital.股份总数/10000 as market_cap,     
        balance.负债合计/balance.资产总计 as debt_ratio,                                                        
        profit.归属于母公司所有者的净利润/balance.'所有者权益(或股东权益)合计' as roe,            
        profit.归属于母公司所有者的净利润/balance.'负债和所有者权益(或股东权益)总计' as roa ,                  
        quote.close*capital.股份总数/profit.归属于母公司所有者的净利润 as pe,                                   
        quote.close*capital.股份总数/balance.资产总计  as pb                                                     
        from profile,capital,quote,balance,profit                                                               
        where  capital.代码=300001   
        and profile.代码=capital.代码  
        and profile.代码=quote.code   
        and profile.代码=balance.代码
        and profile.代码=profit.代码  
        and quote.date='20140523'     
        and balance.报告日期='20131231'      
        and profit.报告日期='20131231';'''
cur.execute(select_str)
print(cur.fetchall())



请问,这是什么原因?

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
2 [报告]
发表于 2014-05-30 14:57 |只看该作者
非常不建议在数据中使用中文字段名,不管它是真正的字段名还是alias.

试着在连接数据库的时候指定编码为 utf8 看看. 我不确定可以.

论坛徽章:
0
3 [报告]
发表于 2014-05-30 16:20 |只看该作者
我把自己的china.sqlite数据库的共享地址也列出来,请下载后测试看看。

http://pan.baidu.com/s/1pJyQamR

论坛徽章:
0
4 [报告]
发表于 2014-05-30 16:28 |只看该作者
select_str='''select  capital.代码 as code,quote.close as close, quote.close*capital.股份总数/10000 as market_cap,     
    balance.负债合计/balance.资产总计 as debt_ratio,                                                        
    profit.归属于母公司所有者的净利润/balance.'所有者权益(或股东权益)合计' as roe,            
    profit.归属于母公司所有者的净利润/balance.'负债和所有者权益(或股东权益)总计' as roa ,                  
    quote.close*capital.股份总数/profit.归属于母公司所有者的净利润 as pe,                                   
    quote.close*capital.股份总数/balance.资产总计  as pb                                                     
    from profile,capital,quote,balance,profit                                                               
    where  capital.代码='300001'  
    and profile.代码=capital.代码  
    and profile.代码=quote.code   
    and profile.代码=balance.代码
    and profile.代码=profit.代码  
    and quote.date='20140523'     
    and balance.报告日期='20131231'      
    and profit.报告日期='20131231';'''

修改成

select_str='''select  capital.代码 as code,quote.close as close, quote.close*capital.股份总数/10000 as market_cap,     
    balance.负债合计/balance.资产总计 as debt_ratio,                                                        
    profit.归属于母公司所有者的净利润/balance.'所有者权益(或股东权益)合计' as roe,            
    profit.归属于母公司所有者的净利润/balance.'负债和所有者权益(或股东权益)总计' as roa ,                  
    quote.close*capital.股份总数/profit.归属于母公司所有者的净利润 as pe,                                   
    quote.close*capital.股份总数/balance.资产总计  as pb                                                     
    from profile,capital,quote,balance,profit                                                               
    where   profile.代码=capital.代码  
    and profile.代码=quote.code   
    and profile.代码=balance.代码
    and profile.代码=profit.代码  
    and quote.date='20140523'     
    and balance.报告日期='20131231'      
    and profit.报告日期='20131231';'''

都可以运行,为何增加了一个 capital.代码='300001'   就不能正常运行呢?

论坛徽章:
0
5 [报告]
发表于 2014-05-30 16:32 |只看该作者
import os,re,sqlite3
db_name='china.sqlite'
target_dir='e:\\workspace\\data\\'
con = sqlite3.connect(target_dir+db_name)
cur=con.cursor()
select_str='''select  capital.代码 as code,quote.close as close, quote.close*capital.股份总数/10000 as market_cap,     
    balance.负债合计/balance.资产总计 as debt_ratio,                                                        
    profit.归属于母公司所有者的净利润/balance.'所有者权益(或股东权益)合计' as roe,            
    profit.归属于母公司所有者的净利润/balance.'负债和所有者权益(或股东权益)总计' as roa ,                  
    quote.close*capital.股份总数/profit.归属于母公司所有者的净利润 as pe,                                   
    quote.close*capital.股份总数/balance.资产总计  as pb                                                     
    from profile,capital,quote,balance,profit                                                               
    where  capital.代码='300001'  
    and profile.代码='300001'  
    and quote.code='300001'  
    and balance.代码='300001'
    and profit.代码='300001'
    and quote.date='20140523'     
    and balance.报告日期='20131231'      
    and profit.报告日期='20131231';'''
cur.execute(select_str)
print(cur.fetchall())

上面可以运行,为何这样就不行?
import os,re,sqlite3
db_name='china.sqlite'
target_dir='e:\\workspace\\data\\'
con = sqlite3.connect(target_dir+db_name)
cur=con.cursor()
select_str='''select  capital.代码 as code,quote.close as close, quote.close*capital.股份总数/10000 as market_cap,     
        balance.负债合计/balance.资产总计 as debt_ratio,                                                        
        profit.归属于母公司所有者的净利润/balance.'所有者权益(或股东权益)合计' as roe,            
        profit.归属于母公司所有者的净利润/balance.'负债和所有者权益(或股东权益)总计' as roa ,                  
        quote.close*capital.股份总数/profit.归属于母公司所有者的净利润 as pe,                                   
        quote.close*capital.股份总数/balance.资产总计  as pb                                                     
        from profile,capital,quote,balance,profit                                                               
        where  capital.代码=300001   
        and profile.代码=capital.代码  
        and profile.代码=quote.code   
        and profile.代码=balance.代码
        and profile.代码=profit.代码  
        and quote.date='20140523'     
        and balance.报告日期='20131231'      
        and profit.报告日期='20131231';'''
cur.execute(select_str)
print(cur.fetchall())

论坛徽章:
0
6 [报告]
发表于 2014-05-30 21:41 |只看该作者
多半是字符集的问题吧,你的库肯定是GBK的,但是的你代码是UTF8的。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP