因此, 在修改model时, 一定尽可能的经过充分的考虑再行动! 以下列出的是我们经常用到的一些工具和技巧:
South, 用于数据迁移, 我们会在每个django项目中都用到. 但到django 1.7时, 将会有django.db.migrations代替.
django-model-utils, 用于处理常见的模式, 例如TimeStampedModel.
django-extensions, 主要用到shell_plus命令, 该命令会在shell中自动载入所有的app的model
1. 基本原则
第一, 将model分布于不同的app中. 如果你的django项目中, 有一个app拥有超过20个model, 那么, 你就应当考虑分拆该app了. 我们推荐每个app拥 有不超过5个model.
第二, 尽量使用ORM. 我们需要的大多数数据库索引都能通过Object-Relational-Model实现, 且ORM带给我们许多快捷方式, 例如生成SQL语句, 读取/更新数据库时的安全验证. 因此, 如果能使用简单的ORM语句完成的, 应当尽量使用ORM. 只有当纯SQL语句极大地简化了ORM语句时, 才使用纯SQL语句. 并且, 在写纯SQL语句是, 应当优先考虑使用raw(), 再是extra().
第三, 必要时添加index. 添加db_index=True到model中非常简单, 但难的是理解何时应该添加. 在建立model时, 我们事先不会添加index, 只有当 以下情况时, 才会考虑添加index:
在所有的数据库查询中使用率在10%-25%时
或当有真实的数据, 或能正确估计出使用index后的效果确实满意时
C#下SQLite *** 作驱动dll下载:System.Data.SQLiteC#使用SQLite步骤:
(1)新建一个project
(2)添加SQLite *** 作驱动dll引用
(3)使用API *** 作SQLite DataBase
using System
using System.Data.SQLite
namespace SQLiteSamples
{
class Program
{
//数据库连接
SQLiteConnection m_dbConnection
static void Main(string[] args)
{
Program p = new Program()
}
public Program()
{
createNewDatabase()
connectToDatabase()
createTable()
fillTable()
printHighscores()
}
//创建一个空的数据库
void createNewDatabase()
{
SQLiteConnection.CreateFile("MyDatabase.sqlite")
}
//创建一个连接到指定数据库
void connectToDatabase()
{
m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqliteVersion=3")
m_dbConnection.Open()
}
//在指定数据库中创建一个table
void createTable()
{
string sql = "create table highscores (name varchar(20), score int)"
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection)
command.ExecuteNonQuery()
}
//插入一些数据
void fillTable()
{
string sql = "insert into highscores (name, score) values ('Me', 3000)"
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection)
command.ExecuteNonQuery()
sql = "insert into highscores (name, score) values ('Myself', 6000)"
command = new SQLiteCommand(sql, m_dbConnection)
command.ExecuteNonQuery()
sql = "insert into highscores (name, score) values ('And I', 9001)"
command = new SQLiteCommand(sql, m_dbConnection)
command.ExecuteNonQuery()
}
//使用sql查询语句,并显示结果
void printHighscores()
{
string sql = "select * from highscores order by score desc"
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection)
SQLiteDataReader reader = command.ExecuteReader()
while (reader.Read())
Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"])
Console.ReadLine()
}
}
}
构造table模型的时候指定一个Class类型数组,覆写table模型(如DefaultTableModel)的getColumnClass(int columnIndex)方法,返回对应的Class数组小标元素即可。另外,table默认是接受boolean类型的,直接在构造模型数据时,把该列数据写为true/false就可,展示的时候就是一个复选框。
还有就是,部分IDE带设计视图,可以在视图上定义表格列类型和内容,如NetBeans。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)