扑通扑通的新手在这里。
我有一个小的Django应用(python),正在将其移植到没有Web后端的独立Flutter应用中。我直接导出了指定我的Django应用程序中使用的SQL表并在flutter应用程序中使用的SQL(DDL;价值约300行)。我最终得到约8个表,我可以通过仅复制/粘贴Django通过ORM为我创建的Django SQL查询来查询这些表。
我的问题:在移动应用程序开发中拥有复杂表是最佳实践吗?我担心SQLite并非最适合这种复杂性。但是我觉得这可以节省我重用已经生成的模型结构和SQL查询范围的时间。
非常感谢, 安迪。
initDb() async {
// Get a location using path_provider
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, "gear_log.db");
await deleteDatabase(path);
var theDb = await openDatabase(path, version: 1,
onCreate: (Database db, int version) async {
String sql = await rootBundle.loadString('assets/db/schema.txt');
for(var s in sql.split(";")) { //seems to be a max # characters for db.execute
if(s.length > 5) { // catching any hidden characters at end of schema
await db.execute(s + ';');
}
}
// When creating the db, create the table
});
return theDb;
}
重复使用Django生成的SQL来检索数据:
Future<List<Item>> getItems() async {
var dbClient = await db;
List<Map> list = await dbClient.rawQuery('SELECT "shoe_actualpair"."id", "shoe_actualpair"."created", "shoe_actualpair"."modified", "shoe_actualpair"."name", "shoe_actualpair"."shoe_id", "shoe_actualpair"."expires", "shoe_actualpair"."runner_id" FROM "shoe_actualpair" WHERE "shoe_actualpair"."runner_id" = 1 ORDER BY "shoe_actualpair"."modified" DESC, "shoe_actualpair"."created" DESC');
List<Item> employees = new List();
for (int i = 0; i < list.length; i++) {
employees.add(Item.fromMap(list[i]));
}
return employees;
}
答案 0 :(得分:1)
您可以使用Jaguar ORM。 https://github.com/Jaguar-dart/jaguar_orm
我在具有一对一,一对多和多对多关系的应用程序中使用它。
对于sqlite(sqflite),在flutter应用程序中还需要此适配器: https://github.com/Jaguar-dart/jaguar_orm/tree/master/sqflite