我正在尝试使用Dapper.Net将JSON数据插入JSONB PostgreSQL列中。
NPGSQL Documentation for JSONB给出了使用NpgsqlDbType.Jsonb
数据类型的具体说明。
使用Dapper,我试图将其添加为自定义参数,但没有成功。
using (var conn = myconnection)
{
var sql = "INSERT INTO mytable (jsonbody) VALUES (@jb);";
dp = new DynamicParameters();
dp.Add("jb", stringOfJsonData, (DbType)NpgsqlDbType.Jsonb);
await conn.ExecuteAsync(sql,dp);
}
我收到的错误是
System.NotSupportedException : The parameter type DbType.36 isn't supported by PostgreSQL or Npgsql
关于如何将这两个库一起用于JSONB的任何建议?
谢谢。
答案 0 :(得分:2)
似乎将SQL语句更改为以下内容可以解决该问题。
import random
import string
# create an account array object that will be used
# in xlsxwriter literal
name=["Beck","Glenn","Becker","Carl","Beckett","Samuel","Beddoes","Mick","Beecher"]
class Acc(object):
def first_name(self):
f_name = random.choice(name)
return f_name
def last_name(self):
l_name = random.choice(name)
return l_name
def addy_line1(self, address):
chars1 = string.ascii_uppercase
chars2 = ''.join(random.choice(chars1) for i in range(4))
return chars2 + address
def phone_number(self, area_code):
rand_num = random.sample(range(10), 7)
number = str((''.join(map(str, rand_num))))
return area_code + number
if __name__ == "__main__":
accObj = Acc()
accObj.first_name()
accObj.last_name()
accObj.addy_line1('123 West St.')
accObj.phone_number('212')
此外,无需在参数映射中指定类型。
['Blanchet', 'Ingmar']
Traceback (most recent call last):
File "C:/Users/Carsten/PycharmProjects/Dna_Nike/Obj_Creator.py", line 29, in <module>
test.create_accounts()
File "C:/Users/Carsten/PycharmProjects/Dna_Nike/Obj_Creator.py", line 21, in create_accounts
for first, last in accounts:
ValueError: too many values to unpack (expected 2)
答案 1 :(得分:1)
NpgsqlDbType和DbType是两个不同的枚举,您不能简单地将一个强制转换为另一个枚举...
您必须在其创建和发送的NpgsqlParameters上设置NpgsqlDbType属性。 IIRC有一种指定自定义参数的方法。