【问题标题】:LOAD DATA LOCAL INFILE '/mnt/sample.txt' if empty?LOAD DATA LOCAL INFILE '/mnt/sample.txt' 如果为空?
【发布时间】:2019-09-17 22:57:59
【问题描述】:

我尝试使用 gpython 连接器将文本文件中的数据加载到 SQL 表中已经 2 周了。我能够在没有任何条件的情况下成功加载数据:

loadData35= "LOAD DATA LOCAL INFILE  '%s' "  %completePath35 + "INTO TABLE %s" %tblname35

但现在我只想在表为空时加载数据。

我曾尝试使用 if else 语句,但由于 SQL 查询的限制而没有成功。以下是我的基本代码,我想在加载语句上应用 if 条件,它仅在表为空(以前未加载)时才执行。

sql35= 'CREATE TABLE if not exists %s (Datum varchar(50), Uhrzeit varchar(13), UpsACT_V varchar(6), UpsPRE_V varchar(6), IpsACT_A varchar(6), IpsPRE_A varchar(6))' %(tblname35)

myCursor.execute(sql35)
myConnection.commit()

loadData35= "LOAD DATA LOCAL INFILE  '%s' "  %completePath35 + "INTO TABLE %s" %tblname35
myCursor.execute(loadData35)
myConnection.commit()

我想知道我们是否可以使用 python 连接器进行这种条件 SQL 加载?

【问题讨论】:

    标签: mysql mariadb pymysql


    【解决方案1】:

    MySQL、MariaDB 和连接器目前不适用于您提到的条件操作。

    您最好的方法是:在一个查询中查询表中的内容,然后在下一个查询中执行加载。查找表是否存在且为空的最佳查询:

       SELECT EXISTS (SELECT 1 FROM table);
    

    这会查找表中的任何行。如果为空,则返回零,否则返回一。一旦您知道该表是否存在且为空,您就可以加载它。

    【讨论】:

    • 感谢您的及时响应,我尝试使用 python 连接器将其作为select35='SELECT EXISTS (SELECT 1 FROM %s)' %(tblname35) myCursor.execute(select35) 嵌入到我的代码中,但出现以下错误:Traceback (most recent call last): File "38select1.py", line 52, in <module> myCursor.execute(sql35) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/cursor.py", line 464, in execute raise errors.InternalError("Unread result found.") mysql.connector.errors.InternalError: Unread result found. @O。琼斯
    • 除了上面的错误,我尝试将SELECT EXISTS (SELECT 1 FROM table);的结果保存在一个变量temp中作为temp=SELECT EXISTS (SELECT 1 FROM table);,但这也没有成功执行。我想知道这是否也可以做到?
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2015-04-17
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多