我是 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
如果有人可以建议一个功能或指导我找到一个解决方案,我将非常感激。
最佳答案
这就是我让它工作的方式:
- pyodbc 查询 mssql 数据库
- python dict 和 zip 将元组列表转换为键值字典对
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/