質問
っていいのかと思うが任意のコードが可能にするを代表すSQL形式のオブジェクトツリーの組み立てることができ、修正、そして最後に描画される有効なSQL?
トップを切っこよう。
var stmnt = new Statement();
stmnt
.AddMaster("Customer")
.Show("Firstname, "Lastname")
.AddJoin("Address", "ID", "CustomerID")
.Show("Street", "City");
stmnt.WhereStatement()
.AddParameter("Address.City", Op.Equal);
string sql = stmnt.Generate();
// select a.FirstName, a.LastName, b.Street, b.City
// from Customer a
// join Address b on b.CustomerID = a.ID
// where b.City = :p1
この、あくまで目安ですが、例えば、ものである場合には全くの別物ですが、ああ、プレイしていただければと思いを聞くことがtereる。
更新:
知っているし、多くの可能性を用いORM技術が上手になりたいから、結果はDBからがった後のモデルのSQLそのものです。のを知っているレベルの抽象化は低いものの、誤りがあったように複数の共同研究者でSQLステートメント(複数参加、複数のじ)では、"描画"の構築に取ります。
解決
PythonパッケージSQLAlchemyのは、ORM層を有しているが、それはまた、SQL生成層を有しています。
[私はあなたがこのポストC#と.NETをタグ付けされた実現、私はあなたがそこにある他のものを見るのが好きかもしれないと思っ]
ここではいくつかのサンプルコードがあります:
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.sql import select
metadata = MetaData()
# Make a basic customer table.
Customer = Table('Customer',
metadata,
Column('ID', Integer, primary_key=True),
Column('FirstName', String),
Column('LastName', String))
# Make a basic address table
Address = Table('Address',
metadata,
Column('ID', Integer, primary_key=True),
Column('City', String),
Column('Street', String),
Column('CustomerID', None, ForeignKey('Customer.ID')))
# Generate some sql
stmt = select([Customer.c.FirstName,
Customer.c.LastName,
Address.c.Street,
Address.c.City],
from_obj=Customer.join(Address),
whereclause=Address.c.City == 'Wellington')
# Display
print stmt
# output:
SELECT "Customer"."FirstName", "Customer"."LastName", "Address"."Street", "Address"."City"
FROM "Customer" JOIN "Address" ON "Customer"."ID" = "Address"."CustomerID"
WHERE "Address"."City" = :City_1
# note that SQLAlchemy picked up the join condition from the foreign key.
# you can specify other join conditions if you want.
一般的に、データベースへの接続にSQLAlchemyのを使用して文を実行します。そして、あなたが行うことができます:
for row in stmt.execute():
print 'Name:', row.c.FirstName, row.c.LastName, 'City:', row.c.City
この情報がお役に立てば幸いです。
他のヒント
Hibernateは、オブジェクトとしてSQL状コンストラクトを表す独自のHibernateクエリ言語(HQL)を有している。
は-Mapperに不可欠なネットワークの LINQ
いくつか例を挙げてみましょう。
from c in customers
where c.LastName.StartsWith("A")
select c
//
var q = from c in db.Contact
where c.DateOfBirth.AddYears(35) > DateTime.Now
orderby c.DateOfBirth descending
select c;
いくつかのリンクできます:
上記を参照してください、と私はこの道を、複数のプログラマの頭を見てきました。 (そして、私は...私は、複数のプログラマを見てきた複数のプログラマを言ったが、通常、彼らはそれがどのように動作するかも自分で見つけ出す終わる。)
私が見難しさは、あなたが抽象化の方法で多くを提供することなく、かなりの複雑さを追加しているということです。あなたはかなりあなたがとにかくで終わることでしょうどのようなSQLを知る必要があります。
(少なくとも、あなたは直接の句を指定しているあなたのイラスト、で表されるようなパターンがあること。だけでなくその先のORM抽象度まで。)
あなたはのmetadb して試すことができます。行っていくつかの作業があります。 サンプルクエリhttp://i3.codeplex.com/Project/ダウンロード/ FileDownload.aspx?プロジェクト名=のmetadb&DownloadId = 11482 の
しかし、あなたは.NET 3.5を使用することができれば、あなたはLINQを使用することができます。
.NETで、LINQのは、あなたが何を言ってるのか、ほとんどありません。
あなたはまだ.NET 2.0を使用していて、以降のLINQに移動していない場合は、その後、私はDecoratorパターンを可能にするクラスを作成し、その後、基本文のクラスを作成することになります。
あなたはちょうどあなたがあなたのベース・ステートメントに必要なものを追加し続けることができます。その方法