我打电话给Weight Gurus请求数据,Weight Gurus以python字典的格式返回,当然还有键和值。我需要获取从此调用中检索的数据,并将每个键/值对插入为单独的行。
到目前为止,我已经设法从Weight Gurus获取数据,并且还在python中建立了到我的数据库的连接,但是遍历字典以将每个值对插入到单独的行中没有运气。
class MyDense(Layer):
def __init__(self,
units,
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
apply_cond = False,
**kwargs):
if 'input_shape' not in kwargs and 'input_dim' in kwargs:
kwargs['input_shape'] = (kwargs.pop('input_dim'),)
super(MyDense, self).__init__(
activity_regularizer=regularizers.get(activity_regularizer), **kwargs)
self.units = int(units)
self.activation = activations.get(activation)
self.use_bias = use_bias
self.kernel_initializer = initializers.get(kernel_initializer)
self.bias_initializer = initializers.get(bias_initializer)
self.kernel_regularizer = regularizers.get(kernel_regularizer)
self.bias_regularizer = regularizers.get(bias_regularizer)
self.kernel_constraint = constraints.get(kernel_constraint)
self.bias_constraint = constraints.get(bias_constraint)
self.apply_cond = apply_cond
self.supports_masking = True
self.input_spec = InputSpec(min_ndim=2)
def build(self, input_shape):
input_shape = tensor_shape.TensorShape(input_shape)
if tensor_shape.dimension_value(input_shape[-1]) is None:
raise ValueError('The last dimension of the inputs to `Dense` '
'should be defined. Found `None`.')
last_dim = tensor_shape.dimension_value(input_shape[-1])
self.input_spec = InputSpec(min_ndim=2,
axes={-1: last_dim})
self.kernel = self.add_weight(
'kernel',
shape=[last_dim, self.units],
initializer=self.kernel_initializer,
regularizer=self.kernel_regularizer,
constraint=self.kernel_constraint,
dtype=self.dtype,
trainable=True)
if self.use_bias:
self.bias = self.add_weight(
'bias',
shape=[self.units,],
initializer=self.bias_initializer,
regularizer=self.bias_regularizer,
constraint=self.bias_constraint,
dtype=self.dtype,
trainable=True)
else:
self.bias = None
self.built = True
def call(self, inputs):
# print('in start of call apply_cond is: ', self.apply_cond)
inputs = ops.convert_to_tensor(inputs)
rank = common_shapes.rank(inputs)
if rank > 2:
# Broadcasting is required for the inputs.
outputs = standard_ops.tensordot(inputs, self.kernel, [[rank - 1], [0]])
# Reshape the output back to the original ndim of the input.
if not context.executing_eagerly():
shape = inputs.get_shape().as_list()
output_shape = shape[:-1] + [self.units]
outputs.set_shape(output_shape)
else:
outputs = gen_math_ops.mat_mul(inputs, self.kernel)
if self.use_bias:
outputs = nn.bias_add(outputs, self.bias)
if self.activation is not None:
outputs = self.activation(outputs) # pylint: disable=not-callable
if self.apply_cond:
cond = tf.less_equal(outputs, tf.constant(0.00001), name='mycondition')
return tf.where(cond, tf.ones_like(outputs), tf.zeros_like(outputs), name='mywhere')
return outputs
def compute_output_shape(self, input_shape):
input_shape = tensor_shape.TensorShape(input_shape)
input_shape = input_shape.with_rank_at_least(2)
if tensor_shape.dimension_value(input_shape[-1]) is None:
raise ValueError(
'The innermost dimension of input_shape must be defined, but saw: %s'
% input_shape)
return input_shape[:-1].concatenate(self.units)
该词典由9个键组成。每个键都是我表中名为BodyComposition的列。每个键值对应该是单独的一行。我的表还有一个主键增量ID字段(如果有区别的话)。
答案 0 :(得分:1)
考虑将字典集合解压缩为键/值元组,然后在循环中参数化值元组。假设下面的数据结构(词典列表):
scale_data_json["operations"] = [{'BMI': 0, 'BodyFat': 10,
'Entrytimestamp': '2018-01-21T19:37:47.821Z',
'MuscleMass': 50, 'OperationType': 'create',
'ServerTimestamp':'2018-01-21T19:37:47.821Z',
'Source':'bluetooth scale',
'Water':37, 'Weight':21},
{'BMI': 0, 'BodyFat': 10,
'Entrytimestamp': '2018-01-21T19:37:47.821Z',
'MuscleMass': 50, 'OperationType': 'create',
'ServerTimestamp':'2018-01-21T19:37:47.821Z',
'Source':'bluetooth scale',
'Water':37, 'Weight':21},
...]
遍历每个字典,用zip
解开值,然后将其绑定到cursor.execute
中:
# PREPARED STATEMENT
sql = """INSERT INTO BodyComposition (BMI, BodyFat, Entrytimestamp,
MuscleMass, OperationType, ServerTimestamp,
Source, Water, Weight)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
# LOOP, UNPACK, BIND PARAMS
for entry in scale_data_json["operations"]:
keys, values = zip(*entry.items())
cursor.execute(sql, values)
cnxn.commit()