在这篇文章中,我们将带领您了解SQLAlchemy可以与GoogleCloudSQL一起使用吗?的全貌,包括sqlalchemy连接sqlserver的相关情况。同时,我们还将为您介绍有关apache
在这篇文章中,我们将带领您了解SQLAlchemy可以与Google Cloud SQL一起使用吗?的全貌,包括sqlalchemy连接sqlserver的相关情况。同时,我们还将为您介绍有关apache ignite 的Text Query可以结合sql查询一起使用吗?或者说是否可以通过sql语句的方式进行文本查询?、apscheduler遇到错误:SQLAlchemyJobStore requires SQLAlchemy、Flask-SQLAlchemy-会话如何与多个数据库一起使用?、flask_sqlalchemy和sqlalchemy的区别有哪些?的知识,以帮助您更好地理解这个主题。
本文目录一览:- SQLAlchemy可以与Google Cloud SQL一起使用吗?(sqlalchemy连接sqlserver)
- apache ignite 的Text Query可以结合sql查询一起使用吗?或者说是否可以通过sql语句的方式进行文本查询?
- apscheduler遇到错误:SQLAlchemyJobStore requires SQLAlchemy
- Flask-SQLAlchemy-会话如何与多个数据库一起使用?
- flask_sqlalchemy和sqlalchemy的区别有哪些?
SQLAlchemy可以与Google Cloud SQL一起使用吗?(sqlalchemy连接sqlserver)
我查看了Google Cloud SQL的文档和各种搜索,但无法确定是否可以将SQLAlchemy与Google Cloud
SQL一起使用,如果可以,则连接URI应该是什么。
我正在寻找使用Flask-SQLAlchemy扩展,并且需要这样的连接字符串: mysql://username:password@server/db
我看到了Django示例,但看起来配置使用的样式与连接字符串不同。 https://developers.google.com/cloud-
sql/docs/django
Google Cloud SQL文档:https : //developers.google.com/cloud-
sql/docs/developers_guide_python
答案1
小编典典更新资料
Google Cloud SQL现在支持直接访问,因此MySQLdb
可以使用方言。推荐的通过mysql方言的连接使用URL格式:
mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>
mysql+gaerdbms
从1.0版开始已在SQLAlchemy中弃用
如果其他人仍然觉得有帮助,我将在下面保留原始答案。
对于以后访问此问题(并且不想通读所有注释)的用户,SQLAlchemy现在使用连接字符串/方言支持0.7.8版以上的Google Cloud
SQL(请参阅:docs):
mysql+gaerdbms:///<dbname>
例如:
create_engine(''mysql+gaerdbms:///mydb'', connect_args={"instance":"myinstance"})
我已建议对方言进行更新,mysql+gaerdmbs://
以支持两种Google
Cloud SQL API(rdbms_apiproxy
和rdbms_googleapi
),以便从非Google App
Engine生产实例(例如,您的开发工作站)连接到Cloud
SQL。更改还将通过将项目和实例作为字符串的一部分来稍微修改连接字符串,并且不需要通过单独传递connect_args
。
例如
mysql+gaerdbms:///<dbname>?instance=<project:instance>
这也将使Cloud SQL与Flask-SQLAlchemy或其他您未明确进行create_engine()
调用的扩展一起使用。
apache ignite 的Text Query可以结合sql查询一起使用吗?或者说是否可以通过sql语句的方式进行文本查询?
apache ignite 的Text Query可以结合sql查询一起使用吗?或者说是否可以通过sql语句的方式进行文本查询?
apscheduler遇到错误:SQLAlchemyJobStore requires SQLAlchemy
英文:SQLAlchemyJobStore requires SQLAlchemy installed
翻译下:SQLAlchemyJobStore需要安装SQLAlchemy
说白了就是需要安装SQLAlchemy
安装也很简单
pip install sqlalchemy
关注我获取更多内容
Flask-SQLAlchemy-会话如何与多个数据库一起使用?
我正在开发Flask项目,并且正在使用Flask-SQLAlchemy。
我需要使用多个已经存在的数据库。
我创建了“ app”对象和SQLAlchemy对象:
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)db = SQLAlchemy(app)
在配置中,我设置了默认连接和其他绑定:
SQLALCHEMY_DATABASE_URI = ''postgresql://pg_user:pg_pwd@pg_server/pg_db''SQLALCHEMY_BINDS = { ''oracle_bind'': ''oracle://oracle_user:oracle_pwd@oracle_server/oracle_schema'', ''mssql_bind'': ''mssql+pyodbc://msssql_user:mssql_pwd@mssql_server/mssql_schema?driver=FreeTDS''}
然后,我使用声明性系统创建表模型,并在需要时设置 __bind_key__
参数以指示表位于哪个数据库中。
例如:
class MyTable(db.Model): __bind_key__ = ''mssql_bind'' __tablename__ = ''my_table'' id = db.Column(db.Integer, nullable=False, primary_key=True) val = db.Column(db.String(50), nullable=False)
这样,一切正常,当我执行查询时,它是在正确的数据库上进行的。
阅读SQLAlchemy文档和Flask-SQLALchemy文档,我理解这些事情(我将它们写下以检查我是否正确理解):
- 您可以通过会话处理事务。
- 在SQLAlchemy中,您可以将会话与特定引擎绑定。
- Flask-SQLAlchemy在请求开始时自动创建会话(scoped_session),并在请求结束时销毁它
所以我可以做:
record = MyTable(1, ''some text'')db.session.add(record)db.session.commit()
我不明白在Flask-SqlAlchemy中使用多个数据库进行会话时会发生什么。
我验证了系统可以通过__bind_key__
参数正确地将表绑定到正确的数据库,因此,我可以通过将该数据插入不同数据库中db.session
,并在提交时保存所有内容。
但是,我无法理解Flask-SQLAlchemy是创建多个会话(每个引擎一个会话)还是以不同的方式管理事物。
在这两种情况下,如何引用特定数据库的会话/事务?
如果我使用db.session.commit()
系统,那么是否对所有涉及的数据库都进行提交,但是如果我只想对单个数据库进行提交,该怎么办?
我会做类似的事情:
db.session(''mssql_bind'').commit()
但是我不知道该怎么做。
我还看到了Flask-SQLAlchemy实现,可以简化这些情况的管理:
问题:https :
//github.com/mitsuhiko/flask-
sqlalchemy/issues/107
实现:https :
//github.com/mitsuhiko/flask- sqlalchemy / pull /
249,
但我不知道如何使用它。
在Flask-SQLAlchemy中,如何管理每个引擎的会话?
答案1
小编典典Flask-SQLAlchemy使用定制的会话,该会话根据__bind_key__
映射类中的给定属性处理绑定路由。实际上,它实际上将该键作为信息添加到创建的表中。换句话说,Flask不会创建多个会话,每个绑定一个会话,而是一个单个会话,该会话根据绑定键路由到正确的可连接对象(引擎/连接)。请注意,香草SQLAlchemy具有开箱即用的类似功能。
在这两种情况下,如何引用特定数据库的会话/事务?如果我使用
db.session.commit()
系统,那么是否对所有涉及的数据库都进行提交,但是如果我只想对单个数据库进行提交,该怎么办?
在会话中使用会话拥有的连接来颠覆并向特定数据库提交提交不是一个好主意。会话是一个整体,并跟踪对象实例的状态,在需要时刷新对数据库的更改等。这意味着会话所处理的事务不仅是数据库事务,而且是会话本身的事务。所有这些都应该提交和回滚。
另一方面,您可以创建新的SQLAlchemy(或Flask-
SQLAlchemy)会话,这些会话可能通过绑定之一加入正在进行的事务:
session = db.create_scoped_session( options=dict(bind=db.get_engine(app, ''oracle_bind''), binds={}))
这就是请求请求的内容。它允许使用现有的事务连接作为新Flask-SQLAlchemy会话 的
绑定。例如,在测试中这是非常有用的,从该请求请求的原理中可以看出。这样,您可以拥有一个“主”事务,例如可以回滚测试中完成的所有操作。
请注意,如果存在 bind_key
,则SignallingSession
始终会查询该db.get_engine()
方法。这意味着示例会话无法在没有绑定键的情况下查询表,并且该表在您的oracle
DB上不存在,但仍适用于具有 mssql_bind 键的表。
另一方面,您链接到的问题确实列出了将SQL发出到特定绑定的方法:
rows = db.session.execute(query, params, bind=db.get_engine(app, ''oracle_bind''))
还列出了其他不太显式的方法,但是显式比隐式更好。
flask_sqlalchemy和sqlalchemy的区别有哪些?
概要的说:
SQLAlchemy是python社区使用最广泛的ORM之一,SQL-Alchmy直译过来就是SQL炼金术。
Flask-SQLAlchemy集成了SQLAlchemy,它简化了连接数据库服务器、管理数据库操作会话等各类工作,让Flask中的数据处理体验变得更加轻松。
虽然我们要使用的大部分类和函数都由SQLAlchmey提供,但在Flask-SQLAlchemy中,大多数情况下,我们不需要手动从SQLAlchemy导入类或函数。在sqlalchemy和sqlalchemy.orm模块中实现的类和函数
,以及其他几个常用的模块和对象都可以作为db对象的属性调用。当我们创建这样的调用时,Flask-SQLAlchemy会自动把这些调用转发到对应的类、函数或模块
具体区别:
区别1:定义模型:
flask_sqlalchemy需要使用db.Column,而sqlalchemy则不需要
flask_sqlalchemy写法:
1 class Role(db.Model):
2 __tablename__ = ''roles''
3 id = db.Column(db.Integer, primary_key=True)
4 name = db.Column(db.String(64))
5 user = db.relationship(''User'', backref=''role'')
6
7 def __repr__(self):
8 return ''<Role %r>'' % self.name
sqlalcehmy写法:
1 class EnvConfig(Base):
2 __tablename__="env_config"
3 id=Column(Integer,primary_key=True)
4 host = Column(String(50)) # 默认值 1 0:appapi.5i5j.com,
5 def __repr__(self):
6 return "<EnvConfig.%s>"%self.host
区别2:声明字段类型
flask_sqlalchemy使用定义字段类型时无须额外导入类型,一切类型都通过db对象直接调用
1 from flask import Flask
2 from flask_sqlalchemy import SQLAlchemy
3
4 app = Flask(__name__)
5
6 # 设置连接数据库的URL
7 # 不同的数据库采用不同的引擎连接语句:
8 # MySQL: mysql://username:password@hostname/database
9
10 app.config[''SQLALCHEMY_DATABASE_URI''] =''mysql+mysqlconnector://root:admin123456@10.1.71.32:3306/test''
11
12 # 设置每次请求结束后会自动提交数据库的改动
13 app.config[''SQLALCHEMY_COMMIT_ON_TEARDOWN''] = True
14 app.config[''SQLALCHEMY_TRACK_MODIFICATIONS''] = True
15
16 # 查询时显示原始SQL语句
17 app.config[''SQLALCHEMY_ECHO''] = False
18 db = SQLAlchemy(app)
sqlalchemy需要单独导入字段声明类型:
1 from sqlalchemy.ext.declarative import declarative_base
2 from sqlalchemy import Column,Integer,Text,String,Enum
3 Base =declarative_base()
完整的代码片断:
# 导入依赖
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 创建对象的基类
Base = declarative_base()
# 定义User对象
class User(Base):
# 表的名字
__tablename__ = ''user''
# 表的结构
id = Column(String(20), primary_key=True)
name = Column(String(20))
# 初始化数据库链接
engine = create_engine(''mysql+mysqlconnector://root:123456@localhost:3306/test'')
# 创建DBSession类型
DBSession = sessionmaker(bind=engine)
# 添加
# 创建Session对象
session = DBSession()
# 创建User对象
new_user = User(id=''5'', name=''Bob'')
# 添加到session
session.add(new_user)
# 提交
session.commit()
# 关闭session
session.close()
# 查询
# 创建session
session = DBSession()
# 利用session创建查询,query(对象类).filter(条件).one()/all()
user = session.query(User).filter(User.id==''5'').one()
print(''type:{0}''.format(type(user)))
print(''name:{0}''.format(user.name))
# 关闭session
session.close()
# 更新
session = DBSession()
user_result = session.query(User).filter_by(id=''1'').first()
user_result.name = "jack"
session.commit()
session.close()
# 删除
session = DBSession()
user_willdel = session.query(User).filter_by(id=''5'').first()
session.delete(user4._willdel)
session.commit()
session.close()
区别3:
查询方式不一样
sqlalchemy通过session.query(模型名)查询
而flask_sqlalchemy则是通过 模型名.query查询
#SQLAlchemy
result_id = session.query(ScriptRunResult).order_by(ScriptRunResult.id.desc()).all()[0].id
result_id =
#Flask-SQLAlchemy
ScriptRunResult.query.order_by(ScriptRunResult.id.desc()).all()[0].id
关于SQLAlchemy可以与Google Cloud SQL一起使用吗?和sqlalchemy连接sqlserver的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于apache ignite 的Text Query可以结合sql查询一起使用吗?或者说是否可以通过sql语句的方式进行文本查询?、apscheduler遇到错误:SQLAlchemyJobStore requires SQLAlchemy、Flask-SQLAlchemy-会话如何与多个数据库一起使用?、flask_sqlalchemy和sqlalchemy的区别有哪些?的相关知识,请在本站寻找。
本文标签: