pyodbc在mssq中插入空日期而不是19000101默认值

2024-10-02 18:17:04 发布

您现在位置:Python中文网/ 问答频道 /正文

问题: 当my csv datefield=''时,mysql服务器正在将日期转换为1900,01,01。在

我想要的: 我想动态评估是否要发送“”作为日期,而不是发送NULL或None。在

编辑:按照beargle的建议,我尝试了pypyodbc写了这段疯狂的代码。。。而且似乎很管用。在

我创建了一个列是日期的列表, 逐项检查它,并评估它是否应该是无。在

如果你有更好的主意,请告诉我!在

import pypyodbc as pyodbc

def sendTOSQL(csvLocation,sqlTableName):
    x=0
    with open (csvLocation, 'r') as f:
                cnxn = pyodbc.connect('DSN=dashboarddatadev')
                cursor = cnxn.cursor()            
                reader = csv.reader(f)
                list=[]
                cursor.execute('select * from %s' % sqlTableName)
                for i in cursor.description:
                    if i[1].__name__=='datetime':
                        list.append(1)
                    else: 
                        list.append(0)
                cnxn2 = pyodbc.connect('DSN=dashboarddatadev')
                cursor = cnxn2.cursor()            
                reader = csv.reader(f)
                columns = next(reader) 
                print columns
                for data in reader:
                        changeNulls=zip(data,list)
                        y=0
                        for item in changeNulls:
                            if item[1]==1 and item[0]==' ':
                                data[y]=None
                            y=y+1
                        query = 'insert into {0}({1}) values ({2})'
                        query = query.format(sqlTableName,','.join(columns), ','.join('?' * len(columns)))
                        itemchange=re.compile(re.escape('case,'),re.IGNORECASE)
                        query=itemchange.sub('"case",',query)
                        itemchange=re.compile(re.escape('full,'),re.IGNORECASE)
                        query=itemchange.sub('"full",',query)
                        cursor.execute(query, data)
                        if x % 1000000==0:
                            if len(str(x)) > 7:
                                xstar=str(x)[0:2]
                            else:
                                xstar=str(x)[0]
                            if xstar=='0':
                                logging.debug(r'processing and counting rows to a million' )
                            else:
                                logging.debug(r'%s,000,000 rows processed and counting' % (xstar))
                        x=x+1
                cursor.commit() 

Tags: columnscsvinrefordataifquery