我有一个从网上抓取的数据文件,它是使用python脚本生成的 如何将其加载到我的Realm反应本机数据库中? 我偶然发现可以从JSON文件加载而不做任何修改的想法,是否可能,如何做到这一点?
如何在本机中指定文件的路径? 如何解析本地的文件?
更新:
你能否建议我在React Native中使用数据的一般工作流程?我没有找到有用的手册。
我想知道,我应该解析React native(通用脚本)中的文件,在这种情况下如何指定它们的路径,或者我应该在特定平台中使用它们(来自Andriod / iOS项目)?
答案 0 :(得分:1)
最后,我提出了提供重新填充数据库的有效工作流程
1. 将数据转换为json格式,因为可以使用节点的npm require
方法直接导入json文件。 (我有csv格式的文件,并编写了python脚本将其转换为json),所以你的文件应该是这样的:
{"key0": ["property0", "property1"], "key1": ["property0", "property1"]...}
实际上你创建了具有数据库模式的json文件,示例文件将映射到以下模式:
const MyDBSchema = {
name: 'MyEntity',
primaryKey: 'key',
properties: {
key: 'string',
property0: 'string',
property1: 'int',
property2: 'int',
property3: 'int'
}
};
如您所见,我从子文件加载属性:property0,property1,在创建数据库时初始化其他属性。
2. 首次创建数据库:
这包括数据库的生成和选择放置的地方(注意放在哪里,因为这里的选择有限)。
这里的关键要素是我们只创建一次数据库,只有在没有数据库的情况下,我们才使用RNFS
模块。
我们的算法相当紧张:如果文件存在 - 打开它,否则创建并打开它。
export async function openDB() {
realm = await Realm.open({
path: RNFS.DocumentDirectoryPath + '/myDBname.realm',
schema: [MySchema],
});
RNFS.exists(RNFS.DocumentDirectoryPath + '/myDBname.realm').then(exists => {
if(!exists) {
createDB(realm);
}
});
return realm;
}
数据库创建在Realm的网页上描述,无论如何这里是我的代码片段,所以你可以看到它如何映射到整体图片:
let entities = require('../../data/myJsonFileForDB');
export function createDB(realm){
try {
console.log("Creating DB");
console.log("db path:" + realm.path);
realm.write(() => {
for (let entity in entities) {
let property0 = entities['property0'][0];
let property1 = parseInt(entities['property0'][1]);
realm.create('myEntity',
{
property0: property0,
property1: property1,
property2: 0,
property3: 0,
}, true);
}
});
} catch (error) {
console.log(error)
console.log("Error on creation");
}
};
答案 1 :(得分:0)
这是来自领域网站。看起来你只需将你拥有的任何内容转换为适用于你正在做的事情的JSON对象,然后将其定义为一个模式并从中创建一个新的Realm对象。
const Realm = require('realm');
class Person {}
Person.schema = {
name: 'Person',
primaryKey: 'name',
properties: {
name: 'string',
age: {type: 'int', default: 0},
},
};
const realm = new Realm({schema: [Person]});
// Query
let people = realm.objects('Person', 'age >= 17');
people.length // => 0
// Write
realm.write(() => {
savedPerson = realm.create('Person', {
name: 'Hal Incandenza',
age: 17,
});
});
// Queries are updated in real-time
people.length // => 1
let pups = realm.objects('Dog').filtered('age < 2');