找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 100|回复: 13

[求助] json存入sql server

2

主题

9

帖子

9

积分

贫民

积分
9
sally786 发表于 7 天前 | 显示全部楼层 |阅读模式
求助各位大神
用pyodbc将json存入sqlserver
但是表里有27个变量 不想一个一个导入表里 想写一个for循环 直接自动读取每个变量 同时把相对应的值存入sql
程序如图
cursor.execute( )里的应如何改
先谢过~~


py

py
回复

使用道具 举报

0

主题

64

帖子

64

积分

新手

积分
64
sheeboard 发表于 7 天前 | 显示全部楼层
试试看pandas 里的read_json和to_sql.
回复 支持 反对

使用道具 举报

1

主题

115

帖子

115

积分

版主

Rank: 7Rank: 7Rank: 7

积分
115

热心会员默默耕耘优秀版主

剑心无痕 发表于 6 天前 | 显示全部楼层
sql = []
for lines in records:
    if isinstance(lines, dict):
        for key, value in lines.items():
            sql.append('INSERT INTO wodata(%s) values (%s);' % (key, value))
cursor.execute(''.join(sql))
cnxn.commit()
这样把你多次调用execute改为一次,具体你说的27个变量是什么没理解
回复 支持 反对

使用道具 举报

0

主题

64

帖子

64

积分

新手

积分
64
sheeboard 发表于 6 天前 | 显示全部楼层
剑心无痕 发表于 2017-12-7 08:24
sql = []
for lines in records:
    if isinstance(lines, dict):

我猜是有27个key对应27个列名。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

9

积分

贫民

积分
9
sally786  楼主| 发表于 6 天前 | 显示全部楼层
sheeboard 发表于 2017-12-7 08:42
我猜是有27个key对应27个列名。

是的 就是这个意思哈
回复 支持 反对

使用道具 举报

2

主题

9

帖子

9

积分

贫民

积分
9
sally786  楼主| 发表于 6 天前 | 显示全部楼层
sheeboard 发表于 2017-12-6 23:36
试试看pandas 里的read_json和to_sql.

嗯 打算试一下to_sql 谢谢啦
回复 支持 反对

使用道具 举报

1

主题

115

帖子

115

积分

版主

Rank: 7Rank: 7Rank: 7

积分
115

热心会员默默耕耘优秀版主

剑心无痕 发表于 6 天前 | 显示全部楼层
sally786 发表于 2017-12-7 09:34
是的 就是这个意思哈

那就可以这样
sql = []
for lines in records:
    if isinstance(lines, dict):
        sql.append('INSERT INTO wodata(%s) values (%s);' % (','.join([str(i) for i in lines.keys()]), ','.join([str(i) for i in lines.values()])))
        # 如果lines的key都是str类型可以把','.join([str(i) for i in lines.keys()])替换成','.join(lines .keys())同理values也可以替换
cursor.execute(''.join(sql))
cnxn.commit()
回复 支持 反对

使用道具 举报

2

主题

9

帖子

9

积分

贫民

积分
9
sally786  楼主| 发表于 6 天前 | 显示全部楼层
剑心无痕 发表于 2017-12-7 10:33
那就可以这样
sql = []
for lines in records:

好像这一句有错误
cursor.execute(''.join(sql))

ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '11'. (102) (SQLExecDirectW)"
是链接的问题吗
回复 支持 反对

使用道具 举报

2

主题

9

帖子

9

积分

贫民

积分
9
sally786  楼主| 发表于 6 天前 | 显示全部楼层
sheeboard 发表于 2017-12-6 23:36
试试看pandas 里的read_json和to_sql.

试过了 报错
DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'sqlite_master'. (208) (SQLExecDirectW)")
回复 支持 反对

使用道具 举报

1

主题

115

帖子

115

积分

版主

Rank: 7Rank: 7Rank: 7

积分
115

热心会员默默耕耘优秀版主

剑心无痕 发表于 6 天前 | 显示全部楼层
sally786 发表于 2017-12-7 11:26
好像这一句有错误
cursor.execute(''.join(sql))

print(sql[0])打印出来看看语法正确么,怀疑是sql语法错误
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表