【发布时间】:2017-07-12 22:07:48
【问题描述】:
如何使用 pymongo/pandas 在 mongoDb 中批量更新/插入。
我得到的错误是batch op errors occurred
我之所以得到是因为我设置了我想做的"_id"。我的代码在第一次运行时运行良好,但在第二次运行时失败。我想在工作流程中使用熊猫。数据确实有一个日期时间对象。
upsert = True 的语法与Update 完全不同。使用update 的有效解决方案会有所帮助,其中可以设置"_id" 或"qid"。 但是,有 python 日期时间对象!
InSQL = 'SELECT * from database2.table2 '
sqlOut = pd.read_sql(InSQL,cxn)
sqlOut['_id'] = "20170101" + ":"+ sqlOut['Var']
dfOut = sqlOut.to_json(orient='records',date_format='iso' )
try:
db["test"].insert_many(json.loads(dfOut))
except Exception as e: print e
我提供了 50pt 赏金,但已过期,但没有任何答复。嗯……
【问题讨论】:
-
Mongo 使用了
string base input并且不允许任何变量插入(仅限运算符)check this,json.loads(dfOut)你不能插入局部变量作为入口!主键YYYYmmDDHHMMSS+Counter value -
您可以深入了解
BulkWriteError的详细信息并更好地了解正在发生的事情。可能是您个人定义的 id 重复或违反了 12 字节限制。详情请见stackoverflow.com/questions/30355790/mongodb-bulk-write-error。 -
_id 第一次工作的事实告诉我,12 字节的限制不是问题。是的,_id 或 gid 是重复的,需要更新。
-
听起来您的目标是执行 upsert,但当前示例代码正在执行插入(因此预计连续运行将因重复的
_id键而失败)。你能用dfOut内容和你尝试的upsert 代码的简短示例进行更新吗?另外,您使用的是什么版本的 PyMongo?我怀疑您实际上想使用update_many()和upsert选项集。您能否澄清一下对 Python 日期时间对象和_id与qid的担忧?是否要将qid用作_id?
标签: python sql mongodb pandas pymongo