我正在尝试使用Python将数据从CSV文件逐行加载到Azure表存储。字符串列将直接插入,但是源中以2018-02-18T11:29:12.000Z格式提及的日期列仍作为字符串加载。这意味着我无法使用日期列查询记录。

有人可以告诉我是否有一种方法可以为表创建实体定义(列的数据类型)并使用它来加载记录,以避免用字符串类型加载日期?

最佳答案

我试图重现您的问题,但失败了。我将csv文件加载到Azure表存储中,并将数据列加载为DataTime类型。

您可以参考以下代码:

我的csv文件:

'tasksSeattle','001','jay1',100,2018-02-18T11:29:12.000Z
'tasksSeattle','002','jay2',100,2018-02-18T11:29:12.000Z
'tasksSeattle','003','jay3',100,2018-02-18T11:29:12.000Z
'tasksSeattle','004','jay4',100,2018-02-18T11:29:12.000Z
'tasksSeattle','005','jay5',100,2018-02-18T11:29:12.000Z


我的python代码:

from azure.cosmosdb.table.tableservice import TableService
from azure.cosmosdb.table.models import Entity
import csv
import sys
import codecs

table_service = TableService(connection_string='***')

reload(sys)
sys.setdefaultencoding('utf-8')
filename = "E:/jay.csv"

with codecs.open(filename, 'rb', encoding="utf-8") as f_input:
    csv_reader = csv.reader(f_input)
    for row in csv_reader:
        task = Entity()
        task.PartitionKey = row[0]
        task.RowKey = row[1]
        task.description = row[2]
        task.priority = row[3]
        task.logtime = row[4]
        table_service.insert_entity('tasktable', task)


加载结果:

python - 表格存储SDK-LMLPHP

希望对您有帮助。



更新答案:

如果您在上面的屏幕截图中观察到“数据类型”选项框,则不难发现表服务数据模型仅支持这8种类型:


Edm.Binary
Edm.Boolean
约会时间
埃德·杜姆
埃德·古德
Edm.Int32
Edm.Int64
Edm.String


您可以使用here中提到的entity.x = EntityProperty(EdmType.STRING, 'y')函数根据需要定义数据类型。

请参考下面的示例代码:

with codecs.open(filename, 'rb', encoding="utf-8") as f_input:
    csv_reader = csv.reader(f_input)
    for row in csv_reader:
        task = Entity()
        task.PartitionKey = row[0]
        task.RowKey = row[1]
        task.description = row[2]
        task.priority = EntityProperty(EdmType.INT32, row[3])
        task.logtime = EntityProperty(EdmType.DATETIME, row[4])

        table_service.insert_entity('tasktable', task)


仅供参考:

我们可以将字符串转换为datetime并获取日期片段,如下所示:

task.startDateTime = datetime(startDateFrag.year,startDateFrag.month,startDateFrag.day,startDateFrag.hour, startDateFrag.minute,startDateFrag.second)

关于python - 表格存储SDK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48919195/

10-12 18:37