python - 转换 python 列表以进行 mongodb 导入时出现问题

标签 python sql-server mongodb

我是 python、mongodb 和 sql 新手。我正在 Mac 10.7 上使用 Eclipse 3.7.1。我正在使用 pyodbc 驱动程序(和 freeTDS)连接到 mssql 数据库。我正在使用 python 2.7 编写脚本。我想查询mssql数据库并将其写入mongo数据库。

我遇到的问题是查询输出位于没有字段名称的 python 元组列表中,我正在寻找一种方法将此元组列表转换为 mongodb 将导入的形式。

当前脚本:

    ############
    # Query mssql
    import pyodbc
    import json
    url = 'DSN=myServer;UID=myUserName;PWD=myPassword;PORT=1433;DATABASE=mydb'
    pyodbccon = pyodbc.connect(url)
    cursor = pyodbccon.cursor()

    numusersQ = "SELECT COUNT(users.userid) FROM users"; 
    cursor.execute(numusersQ); numusers = cursor.fetchall()
    nummembsQ = "SELECT COUNT(memberships.membernumber) FROM memberships"; 
    cursor.execute(nummembsQ); nummembs = cursor.fetchall()
    userclientQ = "SELECT users.userid, users.client, users.industry FROM users"
    cursor.execute(userclientQ); userclient = cursor.fetchall()

    #format key value tuples
    output = []
    for row in userclient:
        tuplenew = {'userid': row[0], 'client': row[1], 'industry': row[2], 'numusers': numusers, 'nummembs': nummembs}
        output = [output, tuplenew]


    #output to mongo
    from pymongo.connection import Connection ;
    conmongo = Connection('localhost') 
    db = conmongo.mypymongodb

    for key, value in output():
        temp = [key,value]
        mongooutput.append(temp)

    db.pymongocollection.save(mongooutput)
    cursor = db.pymongocollection.find() 

############

输出看起来像:

[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[], {'numusers': [(103068, )], 'industry': 'npwild', 'client': 'cmh', 'userid': 1, 'nummembs': [(10519, )]}], {'numusers': [(103068, )], 'industry': 'npwild', 'client': 'cmh', 'userid': 2, 'nummembs': [(10519, )]}], {'numusers': [(103068, )], 'industry': 'npwild', 'client': 'cmh', 'userid': 3, 'nummembs': [(10519, )]}], {'numusers': [(103068, )], 'industry': 'npwild', 'client': 'cmh', 'userid': 5, 'nummembs': [(10519, )]}]

错误消息:

Traceback (most recent call last):
  File "/Users/eclipse/workspace/pymongo/pymongopkg.py", line 34, in <module>
    for key, value in output():
TypeError: 'list' object is not callable

如果有人可以建议一个功能或指导我找到一个解决方案,我将非常感激。

最佳答案

这就是我让它工作的方式:

  1. pyodbc 查询 mssql 数据库
  2. python dict 和 zip 将元组列表转换为键值字典对
  3. pymongo 将其保存为集合

    #===============================================================================
    # 1. MSSQL QUERY WITH PYODBC
    #===============================================================================
    import pyodbc
    url = 'DSN=myserver;UID=myusername;PWD=mypassword;PORT=1433;DATABASE=mydatabase;'
    pyodbccon = pyodbc.connect(url); cursor = pyodbccon.cursor()
    
    userdataQ = "SELECT users.userid, users.client, users.industry FROM users"
    cursor.execute(userdataQ); userdata = cursor.fetchall()
    
    ##===============================================================================
    ## 2. convert tuple list to key-value dictionary
    ## 3. export to mongodb
    ##===============================================================================        
    from pymongo import Connection; conmongo = Connection('localhost') 
    db = conmongo.mypymongodb #mypymongodb = dbname
    headers = ['userid','client','industry'] 
    
    for tup in userdata:
        nextdoc = dict(zip(headers, tup))
        db.usercollection.save(nextdoc)
    print "usercollection in mypymongodb updated with " + str(db.usercollection.count()) + " docs"
    

输出:

> db.usercollection.find()
{ "_id" : ObjectId("4ef000000"), "industry" : "npwild", "client" : "cmh", "userid" : 1 }
{ "_id" : ObjectId("4ef000001"), "industry" : "npwild", "client" : "cmh", "userid" : 2 }
{ "_id" : ObjectId("4ef000002"), "industry" : "npwild", "client" : "cmh", "userid" : 3 }
etc.

感谢您的帮助! -d

关于python - 转换 python 列表以进行 mongodb 导入时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747192/

相关文章:

静态方法中的python类变量

python - 用 Python 编写的竞赛代码超出了时间限制

sql-server - GO 命令在 SQL 脚本中的作用是什么?

node.js - Mongoose中间件访问其他集合

python - sklearn : User defined cross validation for time series data

python - Azure Databricks python 命令显示当前集群配置

sql-server - 使用GORM在同一张表上设置两个外键时,MS-SQL服务器引发错误

sql - View 和随机数

mongodb - 如何使用Grails 2.2.2从mongoDb检索数据

mongodb - 仅通过有效负载更新