连接postgresql

# psycopg2
engine=create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase')#

 python 连接postgresql使用psycopg2作为默认的DBAPI

The first time a method like  Engine.execute()or Engine.connect()is called, the  Engine establishes a real  DBAPI connection to the database, which is then used to emit the SQL.


The create_engine()function produces an Engineobject basedon a URL.


 1  from sqlalchemy.engine  import create_engine
 2  from sqlalchemy.schema  import MetaData, Table, Column, ForeignKey, Sequence
 3  from sqlalchemy.types  import *
 4 
 5 engine = create_engine( ' postgres://test:test@localhost/test ', echo=True)
 6 
 7 metadata = MetaData()
 8 metadata.bind = engine
 9 
10 book_table = Table( ' book ', metadata,
11     Column( ' id ', Integer, Sequence( ' seq_pk '), primary_key=True),
12     Column( ' title ', Unicode(255), nullable=False),
13 )
14 
15 author_table = Table( ' author ', metadata,
16     Column( ' id ', Integer, Sequence( ' seq_pk '), primary_key=True),
17     Column( ' name ', Unicode(255), nullable=False),
18 )
19 
20 bookauthor_table = Table( ' bookauthor ', metadata,
21    Column( ' book_id ', Integer, ForeignKey( ' book.id '), nullable=False),
22    Column( ' author_id ', Integer, ForeignKey( ' author.id '), nullable=False),
23)
24
25metadata.create_all(checkfirst=True)

首先我们还是create_engine,然后新建一个MetaData对象,把engine绑上去,接下来,开始在metadata中定义表结构(metadata由Table构造函数传入),我们这里定义了3张表,分别是book、author和bookauthor关系表(“多对多”),其中新建一个Sequence对象,专门处理主键生成。最后我们通过执行metadata.create_all()创建数据库表,参数checkfirst=True表示如果数据库相关对象已经存在,则不重复执行创建。

对于已经存在于数据库中的表,我们可以通过传入autoload=True参数到Table构造函数的方式来加载现有的表结构到metadata中,而不必挨个儿再写一遍Column清单。

看到这儿,你也许觉得挺麻烦,不是么?Django和RoR都是可以直接定义数据model类,顺带就把schema也定义了,而不是像这样单独去写表结构的schema,显得很"底层"。确实,这样用SQLAlchemy并不是最优化的,SQLAlchemy本身并不会自动的帮你做很多事,但它基础打得很牢。如果你感兴趣,也可以先去看一下SQLAlchemy的扩展模块Elixir,通过Elixir,你可以像Ruby on Rails那样定义出实体和关系("Active Record")。

 
   
  1. 文/人世间(简书作者)
  2. 原文链接:http://www.jianshu.com/p/e6bba189fcbd
  3. 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  4. # -*- coding: utf-8 -*-
  5. __author__ = 'ghost'
  6. from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
  7. # 连接数据库
  8. engine = create_engine("mysql://root:@localhost:3306/webpy?charset=utf8",encoding="utf-8", echo=True)
  9. # 获取元数据
  10. metadata = MetaData()
  11. # 定义表
  12. user = Table('user', metadata,
  13. Column('id', Integer, primary_key=True),
  14. Column('name', String(20)),
  15. Column('fullname', String(40)),
  16. )
  17. address = Table('address', metadata,
  18. Column('id', Integer, primary_key=True),
  19. Column('user_id', None, ForeignKey('user.id')),
  20. Column('email', String(60), nullable=False)
  21. )
  22. # 创建数据表,如果数据表存在,则忽视
  23. metadata.create_all(engine)
  24. # 获取数据库连接
  25. conn = engine.connect()


sqlalchemy连接postgresql数据库
import sqlalchemy
import pnosql

class Confsql:
def __init__(self,dbstr="postgresql+psycopg2://postgres:root@localhost:5432/Usermodel"):

self.engine = sqlalchemy.create_engine(dbstr, echo=True)
self.metadata = sqlalchemy.MetaData()
self.metadata.bind = self.engine

def runquery(self, sqlstr):
s = sqlstr
result = self.engine.execute(sqlstr)
rows = result.fetchall()
result.close()
需要对返回的数据进行修改才行
def runsp(self,sqlstr):
s = sqlstr
result = self.engine.execute(sqlstr)
rows = result.fetchall()
result.close()

result = []
for row in rows:
x = {}
x["barcode"] = row[0]
x["spcode"] = row[1]
x["spname"] = row[2]
x["spformat"] = row[3]
x["height"] = row[4]
x["width"] = row[5]
x["thickness"] = row[6]

x["comp"] = 'youke'
x["parentcomp"] = 'yz'
x["_id"] = str(uuid.uuid1())

result.append(x)

return result


SqlAlchemy应用
 
    
  1. from sqlalchemy import create_engine,MetaData,Table,select
  2. engine = create_engine('postgresql+psycopg2://postgres:root@localhost:5432/blogdb')
  3. metadata = MetaData()
  4. metadata.bind = engine
  5. auth_permission = Table('auth_permission',metadata,autoload = True)
查询操作
 
    
  1. def query_code(codename):
  2. info = {'name':'','codename':''}
  3. s = select([auth_permission.c.codename, auth_permission.c.name, ]).where(auth_permission.c.codename == codename)
  4. codename_query = engine.execute(s)
  5. for row in codename_query:
  6. info['codename'] = row[0]
  7. info['name'] = row[1]
  8. codename_query.close()
  9. return info
修改操作
 
    
  1. #修改权限
  2. def updata(codename,name):
  3. s = auth_permission.update().where(auth_permission.c.codename == codename).values(name=name,codename=codename)
  4. c = engine.execute(s)
  5. c.close()
添加操作
 
    
  1. # 添加权限
  2. def add(codename,name,content_type_id):
  3. s = auth_permission.insert().values(name=name,codename=codename,content_type_id=content_type_id)
  4. c = engine.execute(s)
  5. c.close()
删除操作
 
   
  1. # 删除权限
  2. def delete(codename):
  3. s = auth_permission.delete().where(auth_permission.c.codename == codename)
  4. c = engine.execute(s)
  5. c.close()

















转载于:https://www.cnblogs.com/wuqingzangyue/p/5770027.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java连接postgresql可以通过使用JDBC(Java Database Connectivity)来实现。首先,需要下载并配置postgresql的JDBC驱动程序,然后在Java代码中使用该驱动程序来连接postgresql数据库。 在Java代码中,可以通过以下步骤来连接postgresql数据库: 1. 导入所需的java.sql包,以便使用JDBC相关的类和方法。 2. 加载postgresql的JDBC驱动程序,可以使用Class.forName()方法来加载驱动程序。 3. 使用DriverManager.getConnection()方法来建立与postgresql数据库连接,需要提供数据库的URL、用户名和密码等连接信息。 4. 获取与数据库连接后,就可以执行SQL查询和更新操作了,可以使用Statement或者PreparedStatement来执行SQL语句。 5. 执行完数据库操作后,需要关闭连接以释放资源,可以使用Connection.close()方法来关闭数据库连接。 整个过程大致就是上述几个步骤,通过这种方法就可以在Java程序中连接postgresql数据库,并进行相关的数据库操作。连接postgresql数据库时需要注意数据库的URL、用户名和密码等信息,确保能够顺利建立连接。另外,还需要处理可能出现的异常情况,比如数据库连接失败或者SQL执行出错等情况。 总之,使用JDBC来连接postgresql数据库并进行相关的数据库操作是Java开发中经常会涉及到的一项任务,通过熟练掌握相关的JDBC知识和技巧,可以轻松地实现与postgresql数据库连接和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值