sqlalchemy+postgreSQL(relationship)

 

1、连接数据库

import os,sys
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'lib'))


CONFIG_PATH = os.path.join(PROJECT_ROOT,'config.cfg')
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
import ConfigParser


cf = ConfigParser.ConfigParser()
cf.read(CONFIG_PATH)


print cf.get("db","db_host")


if cf.get("db","db_host"):
db_host=cf.get("db","db_host")
else:
db_host= "127.0.0.1"  //之前用localhost 报错链接不上数据库 注意


if cf.get("db","db_type"):
db_type= cf.get("db","db_type")
else:
db_type="postgresql+psycopg2"


 

if cf.get("db","db_name"):
db_name=cf.get("db","db_name")
else:
db_name="luoyun"


if cf.get("db","db_user"):
db_user = cf.get("db","db_user")
else:
db_user = "luoyun"

if cf.get("db","db_password"):
db_password = cf.get("db","db_password")
else:
db_password = "luoyun"

str= "%s://%s:%s@%s/%s" % (db_type, db_user,db_password,db_host,db_name)
#dbengine = create_engine('postgresql+psycopg2://luoyun:luoyun@127.0.0.1/luoyun',echo=True,client_encoding='utf8')
dbengine = create_engine(str,echo=True,client_encoding='utf8')

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

ORMBase = declarative_base()

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=dbengine)

dbsession = Session()
db = dbsession

2、定义数据表和类之间的映射关系

import lyorm
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, backref
from lyorm import ORMBase

class User(ORMBase):
     __tablename__='users'
     id = Column(Integer,primary_key=True)
     name = Column(String)
     fullname = Column(String)
     password = Column(String)
     def __init__(self, name, fullname, password):
         self.name = name
         self.fullname = fullname
         self.password = password
     def __repr__(self):
         return "<User('%s','%s','%s')>" % (self.name,self.fullname,self.password)

class Address(ORMBase):
      __tablename__= 'address'
      id = Column(Integer, primary_key=True)
      email_address = Column(String, nullable=False)
      user_id = Column(Integer, ForeignKey('users.id'))
      user = relationship("User", backref = backref('addresses',order_by=id))

      def __init__(self,email_address):
          self.email_address = email_address
      def __repr__(self):
           return "<Address('%s')>" % self.email_address

  3、配置文件  

[db]
db_host = 127.0.0.1
db_type = postgresql+psycopg2
db_name = luoyun
db_user = luoyun
db_password = luoyun

  4、初始化数据库 python manage.py

import models
from lyorm import ORMBase, dbengine,dbsession
ORMBase.metadata.create_all(dbengine)
from models import User

def init():

   jack = User('jack','Jack Bean', '801310')
   dbsession.add(jack)
   dbsession.commit()
if __name__=='__main__':
  init()

  

 

posted @ 2013-04-26 20:16  glose  阅读(4232)  评论(0编辑  收藏  举报