6

我需要将数据从 MSSQL(Microsoft SQL Server)传输到 MySQL,对我来说最好的选择是编写一个 python 脚本,将数据从 MSSQL 导出为 csv,然后将此 csv 导入 mysql。到目前为止,这个过程对我来说效果很好(我不是在寻找另一种方法来做到这一点)。

从 MSSQL 到 MySQL 的数据类型转换是这样完成的:

MSSQL_MySQL_MAP = {
    'nvarchar'  : 'varchar',
    'varchar'   : 'varchar',
    'bit'       : 'boolean',
    'smallint'  : 'smallint',
    'int'       : 'int',
    'datetime'  : 'datetime',
    'timestamp' : 'datetime',
    'ntext'     : 'longtext',
    'real'      : 'double',
    'image'     : 'BLOB',
    'float'     : 'float',
    'money'     : 'decimal',
    }

使用以下命令将导出的 csv 导入 MySQL。

"""LOAD DATA INFILE '%s/%s' REPLACE INTO TABLE %s FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'"""

我有一种情况,MSSQL 中有一个“位”数据类型,导出的 CSV 包含一个 True of False 字符串,如下所示:

 22294,501,q4h,12             ,False,False,None,False,None,None,None,0,None,None

让 MySQL 了解 True 或 False 字符串是布尔值 1 或 0 并正确导入它的最佳方法是什么?目前,我收到以下警告:

Warning: Incorrect integer value: 'False' for column 'system_code' at row 7

有没有办法传递一些参数以及可以完成此操作的加载文件数据?

4

1 回答 1

7

LOAD DATA INFILE语法中所述:

默认情况下,当LOAD DATA INFILE语句末尾没有提供列列表时,输入行应包含每个表列的字段。如果您只想加载表的某些列,请指定列列表:

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

如果输入文件中字段的顺序与表中列的顺序不同,您还必须指定列列表。否则,MySQL 无法判断如何将输入字段与表列匹配。

列列表可以包含列名或用户变量。对于用户变量,该SET子句使您能够在将结果分配给列之前对其值执行转换。

子句中的用户变量SET可以以多种方式使用。以下示例直接将第一个输入列用于 的值t1.column1,并将第二个输入列分配给一个用户变量,该用户变量在用于 的值之前要经过除法运算t1.column2

LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @var1)
  SET column2 = @var1/100;

在您的情况下,您可以执行类似SET boolean_column := @dummy_variable = 'True'.

于 2013-07-12T17:02:36.447 回答