请教大家一个问题

请教大家一个问题

在用python连接数据库的时候有个问题解决不了,google和baidu均没好的答案,故来请教大家一下
[php]
#Program purpose:Change the data of SQL SERVER2000 into ORACLE
#Program author:Jiang Xiao Dan
#Program create time:September 2, 2008
import pymssql
import cx_Oracle
import sys

class Datatodata:
      #Initial method
      def __init__(self):
            print "The program purpose is change the data of SQL SERVER2000 into ORACLE"
      #Visit SQL SERVER 2000
      def mssqlQuery(self):
            n = 0
            conOracle = cx_Oracle.connect("a", "b", "c")
            cursorOracle = conOracle.cursor()
            #sqlOracle = "insert into SALE_COST_MONTH_BAK(Billing_cycle_ID,Local_code,Cost_dept,Subject_code,Term_type,Cust_type,Net_unit,Debit_charge,create_date values("
            try:
                  #Create SQL SERVER2000 connection
                  connection = pymssql.connect(host='1',user='2',password='3',database='4')
                  result = connection.cursor()
                  sql = "select top 20 Billing_cycle_ID,Local_code,Cost_dept,Subject_code,Term_type,Cust_type,Net_unit,Debit_charge,Create_date from SALE_COST_MONTH"
                  result.execute(sql)
            except pymssql.OperationalError,error:
                  print "Error",error
            else:
                  for i in result.fetchall():
                        n = n+1
                        #print i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8]
                        #param = (i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7])
                        #m = cursorOracle.execute(sqlOracle,param)
                        #sqlOracle = sqlOracle+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]+")"
                        cursorOracle.execute("insert into SALE_COST_MONTH_BAK(Local_code,Cost_dept,Subject_code,Term_type,Cust_type,Net_unit) values('"+i[1]+"','"+i[2]+"','"+i[3]+"','"+i[4]+"','"+i[5]+"','"+i[6]+"')")
                        conOracle.commit()
                  result.close()
                  connection.close()
                  cursorOracle.close()
                  conOracle.close()
                  print "Count:",n,"data"
                  print "End"
def main():
      Datatodata().mssqlQuery()
if __name__=="__main__":
      main()
[/php]
程序在“cursorOracle.execute("insert into SALE_COST_MONTH_BAK(Local_code,Cost_dept,Subject_code,Term_type,Cust_type,Net_unit) values('"+i[1]+"','"+i[2]+"','"+i[3]+"','"+i[4]+"','"+i[5]+"','"+i[6]+"')")”报错,错误信息是“Traceback (most recent call last):
  File "D:\eclipse\workspace\redleaf\src\Datatodata.py", line 44, in <module>
    main()
  File "D:\eclipse\workspace\redleaf\src\Datatodata.py", line 42, in main
    Datatodata().mssqlQuery()
  File "D:\eclipse\workspace\redleaf\src\Datatodata.py", line 33, in mssqlQuery
    cursorOracle.execute("insert into SALE_COST_MONTH_BAK(Local_code,Cost_dept,Subject_code,Term_type,Cust_type,Net_unit) values('"+i[1]+"','"+i[2]+"','"+i[3]+"','"+i[4]+"','"+i[5]+"','"+i[6]+"')")
TypeError: cannot concatenate 'str' and 'NoneType' objects”
请问这个问题怎么解决呢?谢谢大家
i[1]到i[6]中肯定有为None的值,所以提示字符串和None类型对象无法连接。
应该是楼上说的那样

对insert或者update字段值的时候最好对每个值加上str处理下,然后最后把sql语句里的None再替换下。
sql = sql.replace('None', 'NULL')
这个为什么不全部用sql实现?
晕看错了  原来是sqlserver插到oracle里。
说实在的,偶对这些热心的回答者的答案非常不满意!这样的回答非常不付责任。这样的程序员,如果工作在北美,是见一个·,就被炒鱿鱼一个。还需要严格训练。

对于数据迁移非“Null”问题只有发生在目的端的数据库表字段属性上。分两种情况处理:

1)目的端数据库表允许字段属性为“Null”,而实际上设计为非“Null”。
   这类问题的发生,往往会造成楼主所示的程序错误。原因是做数据迁移的程序员没有对数据迁移的应用做详细的需求调研。这类情况是目的端的数据库表字段允许字段为“Null”,而实际设计目的库表的字段采用默认的非“Null”属性。对这类问题的解决方法,在明确应用数据库表的字段属性允许为“Null”之后,修改目的库表相应的字段非“Null” 为可以为“Null”选项。无需对程序做修改,数据迁移继续进行。

2)目的端数据库表字段为非“Null”。
   如果目的端的数据库表的确按应用要求设计为非“Null”,应该在程序的except发生时调用自定的应用例程来处理。应用例程应该按照应用数据的要求,如某个字段是流水号,采用相应的处理流程。处理后填上应该填写的数据内容,然后继续处理。一般的情况下,移植数据为“Null”,而实际要求为非“Null”的个别记录的情况,可能是存在非法数据。通常做法,把这类数据记录在迁移过程中先存放到另外一个库表中,待处理完毕后人工分析这类数据记录,交互式完善这类数据记录,或直接删除。
   对这类问题不能采用3楼的把非“Null”字段都填上“null”内容。



QUOTE:
原帖由 passthru 于 2008-9-3 23:34 发表
说实在的,偶对这些热心的回答者的答案非常不满意!这样的回答非常不付责任。这样的程序员,如果工作在北美,是见一个·,就被炒鱿鱼一个。还需要严格训练。

对于数据迁移非“Null”问题只有发生在目的端的数 ...

对于LS,我比较无语……
也许北美的程序员都喜欢答非所问……


QUOTE:
原帖由 jjj137 于 2008-9-3 23:52 发表

对于LS,我比较无语……
也许北美的程序员都喜欢答非所问……

对程序员而言,是无国界的。偶就是北美程序员,偶对楼主的问题,回答有问题吗?

就事论事,偶们在论坛不但要学习计算机方面的技巧,更重要的要学习分析问题的方法。

谢谢大家的解答,我试下,成功了再来回复。


QUOTE:
原帖由 passthru 于 2008-9-4 08:10 发表

对程序员而言,是无国界的。偶就是北美程序员,偶对楼主的问题,回答有问题吗?

就事论事,偶们在论坛不但要学习计算机方面的技巧,更重要的要学习分析问题的方法。

北美程序员你可能没看清楼主的问题有可能不是数据库的问题。只是python空值表示为none的问题