luofeiyu_cu 发表于 2014-05-30 14:28

我的字符串出了什么问题?

本帖最后由 luofeiyu_cu 于 2014-05-30 16:21 编辑

selectcapital.代码 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='''selectcapital.代码 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                                                               
        wherecapital.代码=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())



请问,这是什么原因?

q1208c 发表于 2014-05-30 14:57

非常不建议在数据中使用中文字段名,不管它是真正的字段名还是alias.

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

luofeiyu_cu 发表于 2014-05-30 16:20

我把自己的china.sqlite数据库的共享地址也列出来,请下载后测试看看。

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

luofeiyu_cu 发表于 2014-05-30 16:28

select_str='''selectcapital.代码 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                                                               
    wherecapital.代码='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='''selectcapital.代码 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'   就不能正常运行呢?

luofeiyu_cu 发表于 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='''selectcapital.代码 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                                                               
    wherecapital.代码='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='''selectcapital.代码 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                                                               
      wherecapital.代码=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())

一棵菠菜 发表于 2014-05-30 21:41

多半是字符集的问题吧,你的库肯定是GBK的,但是的你代码是UTF8的。。。。。。。。
页: [1]
查看完整版本: 我的字符串出了什么问题?