Python -执行MySQL字符串

n6lpvg4x  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(121)

我正在用Python的VS代码创建表并加载它们,我得到了以下错误:
mysql.connector.errors.ProgrammingError:无法处理参数:str(进入表coffee_meta_stackexchange_com. posts字段终止于','可选地括起于'"'转义于'"'行终止于'忽略1行;),它必须是list、tuple或dict类型
下面是代码:

cursor1.execute("""LOAD DATA INFILE""" + os.path.join(path, i, file),
                            """INTO TABLE `""" + re.sub('[.-]','_', i) + """`.posts
                            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'  ESCAPED BY '"'
                            LINES TERMINATED BY '""" + "\r\n" +"""' IGNORE 1 LINES;""")

我不知道为什么会有问题。我可以在MySQL中运行mysql查询。或者我想先运行一些python脚本,这是其中之一。
我想让这个Python代码/查询从一个 *. csv文件加载一个表文件,这个文件是从这个网站的数据转储的xml文件转换而来的。

agxfikkp

agxfikkp1#

我终于能够在Python中通过MySQL连接器加载一个文件。问题是/或\(我还没有尝试过os.path.basename(),但是我想返回一个工作路径而不声明它,所以这个选项也是我的工作。当文件试图加载时,查询将返回= ''的值。2所以我使用了SETCASE语句来最终加载csv文件。3结果是混乱的,但它工作。我仍在重写查询以动态清理值,稍后将发布它。

fixpath = "'" + path + os.path.join(os.path.sep, i, file) + "'"
                fixpath = fixpath.replace('\\', '/')
                
                cursor1.execute("""LOAD DATA INFILE """ + fixpath + 
                        """ INTO TABLE `""" + re.sub('[.-]','_', i) + """`.posts CHARACTER SET 'utf8'
                        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'  ESCAPED BY '"'
                        LINES TERMINATED BY '\r\n' IGNORE 1 ROWS""" + 
                        """ (Id, PostTypeId, @parentid, @acceptedanswerid, CreationDate, Score, @viewcount, Body, @owneruserid, LastActivityDate, Title, Tags, @answercount, CommentCount, @favoritecount, ContentLicense)""" +
                        """SET ParentId = CASE WHEN @parentid = '' THEN 0 ELSE @parentid END""" +
                        """,AcceptedAnswerId = CASE WHEN @acceptedanswerid = '' THEN 0 ELSE @acceptedanswerid END
                        ,FavoriteCount = CASE WHEN @favoritecount = '' THEN 0 ELSE @favoritecount END
                        ,ViewCount = CASE WHEN @viewcount = '' THEN 0 ELSE @viewcount END
                        ,AnswerCount = CASE WHEN @answercount = '' THEN 0 ELSE @answercount END
                        ,OwnerUserId = CASE WHEN @owneruserid = '' THEN 0 ELSE @owneruserid END;""")

相关问题