TypeError:参数必须在 Python 中的列表、元组或行中



我构建了一个 python 脚本,该脚本从 Auth0 检索数据并将其发布到 Ms-sql,但我收到错误

for d in data:
print d["email"], d["created_at"],d["last_login"],d["last_ip"] #this part worked great
SQLCommand = ("INSERT INTO [dbo].[Auth0_stg] "
"([Email],[created_at],[last_login],[last_ip]) "
" VALUES(?,?,?,?)")
Values = d["email"],d['created_at'],d['last_login'],d['last_ip']
cursor.executemany(SQLCommand,Values)
cursor.commit()

当我做打印报表时,

d['email'], d['last_login']

一切都打印得很好。 但是当我使用 SQL 命令尝试填充我的表时,它返回此错误

File "C:Python27libsite-packagespypyodbc.py", line 1454, in execute
raise TypeError("Params must be in a list, tuple, or Row")
TypeError: Params must be in a list, tuple, or Row

任何建议/见解表示赞赏!

注意cursor.execute之间的区别:

.execute ( operation [, parameters ])

参数可以作为序列或映射提供,并将绑定到操作中的变量。

cursor.executemany

.executemany ( operation , seq_of_parameters )

准备数据库操作(查询或命令(,然后针对序列seq_of_parameters中找到的所有参数序列或映射执行该操作。

因此,如果仅对一组值执行查询,请像这样调用它:

SQLCommand = ("INSERT INTO [dbo].[Auth0_stg] "
"([Email],[created_at],[last_login],[last_ip]) "
" VALUES(?,?,?,?)")
Values = ['email','created_at','last_login''last_ip']
cursor.executemany(SQLCommand,[Values])
cursor.commit()
executemany

使用不同的参数多次执行相同的请求。因此,它期望一个序列作为第二个参数(例如列表列表或元组列表......

在代码中,您只想对for循环的每次迭代执行一个请求。将executemany替换为execute,它应该可以正常工作。

编辑:对于您的第二个问题,在行之前:

Values = d["email"],d['created_at'],d['last_login'],d['last_ip']

您可以使用 for 循环填充空值:

for key in ["email", "created_at", "last_login", "last_ip"]:
if key not in d:
d[key] = ""

编辑 2:要从字符串创建日期时间对象,您可以使用strptime()

>>> from datetime import datetime
>>> my_str_date = "2016-10-18T20:15:45.454Z"
>>> my_datetime = datetime.strptime(my_str_date, "%Y-%m-%dT%H:%M:%S.%fZ")
>>> print(my_datetime)
2016-10-18 20:15:45.454000

然后,您可以使用strftime()对其进行格式化:

>>> print(my_datetime.strftime("%Y/%m/%d %H:%M:%S"))
2016/10/18 20:15:45

相关内容

  • 没有找到相关文章

最新更新