最近很多小伙伴都在问sqlalchemyMSSQL+pyodbc模式无和pyodbcsqlserver这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展2.SQLAlchemy文档-
最近很多小伙伴都在问sqlalchemy MSSQL + pyodbc模式无和pyodbc sqlserver这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展2.SQLAlchemy 文档 - SQLAlchemy ORM(中文版)、3.SQLAlchemy 文档 - SQLAlchemy Core(中文版)、Connect to MSSQL Database using Flask-SQLAlchemy、Flask 和 Heroku sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres等相关知识,下面开始了哦!
本文目录一览:- sqlalchemy MSSQL + pyodbc模式无(pyodbc sqlserver)
- 2.SQLAlchemy 文档 - SQLAlchemy ORM(中文版)
- 3.SQLAlchemy 文档 - SQLAlchemy Core(中文版)
- Connect to MSSQL Database using Flask-SQLAlchemy
- Flask 和 Heroku sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres
sqlalchemy MSSQL + pyodbc模式无(pyodbc sqlserver)
希望以下内容足以提供最小可行样本。我在一个更大的脚本中使用它来每天移动 1200 万行 3 次,因此我包含了一个我从别处捏来的分块示例。
#Set up enterprise DB connection
# Enterprise DB to be used
DRIVER = "ODBC Driver 17 for SQL Server"
USERNAME = "SQLUsername"
PSSWD = "SQLPassword"
SERVERNAME = "SERVERNAME01"
INSTANCENAME = "\SQL_01"
DB = "DATABASE_Name"
TABLE = "Table_Name"
#Set up SQL database connection variable / path
#I have included this as an example that can be used to chunk data up
conn_executemany = sql.create_engine(
f"mssql+pyodbc://{USERNAME}:{PSSWD}@{SERVERNAME}{INSTANCENAME}/{DB}?driver={DRIVER}",fast_executemany=True
)
#Used for SQL Loading from Pandas DF
def chunker(seq,size):
return (seq[pos : pos + size] for pos in range(0,len(seq),size))
#Used for SQL Loading from Pandas DF
def insert_with_progress(df,engine,table="",schema="dbo"):
con = engine.connect()
# Replace table
#engine.execute(f"DROP TABLE IF EXISTS {schema}.{table};") #This only works for SQL Server 2016 or greater
try:
engine.execute(f"DROP TABLE Temp_WeatherGrids;")
except:
print("Unable to drop temp table")
try:
engine.execute(f"CREATE TABLE [dbo].[Temp_WeatherGrids]([col_01] [int] NULL,[Location] [int] NULL,[DateTime] [datetime] NULL,[Counts] [real] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];")
except:
print("Unable to create temp table")
# Insert with progress
SQL_SERVER_CHUNK_LIMIT = 250000
chunksize = math.floor(SQL_SERVER_CHUNK_LIMIT / len(df.columns))
for chunk in chunker(df,chunksize):
chunk.to_sql(
name=table,con=con,if_exists="append",index=False
)
if __name__ == '__main__':
# intialise data. Example - make your own dataframe. DateTime should be pandas datetime objects.
data = {'Col_01':[0,1,2,3],'Location':['Bar','Pub','Brewery','Bottleshop'],'DateTime':["1/1/2018","1/1/2019","1/1/2020","1/1/2021"],'Counts':[1,3,4}
# Create DataFrame
df = pd.DataFrame(data)
insert_with_progress(df,conn_executemany,table=TABLE)
del [df]
2.SQLAlchemy 文档 - SQLAlchemy ORM(中文版)
接下来,我们将会对对象关系映射器进行全面的介绍和描述。如果你想用它为你的应用程序构建更高层次的 SQL 操作模式,以及为你的 Python 对象提供自动化的持久性功能,那么首先进行下列教程的学习吧。
首先请看: 对象关系理论指南
ORM 的基本配置: 映射器的配置 | 关联的配置 | 继承映射 | 对象集合的高级配置
配置的扩展: 声名式的扩展 | 辅助代理 | 混合属性 | 可变标量 | 排序列表
ORM 的使用: 会话的使用和指南 | 查询 API | 关联数据延迟加载技术
ORM 的扩展 : ORM 事件接口 | 内部 API
其它: 实例介绍 | 已过时的事件接口 | ORM 异常 | 水平数据分片 | 备用说明
http://www.uifanr.com/
Here, the Object Relational Mapper is introduced and fully described. If you want to work with higher-level SQL which is constructed automatically for you, as well as automated persistence of Python objects, proceed first to the tutorial.
Read this first: Object Relational Tutorial
ORM Configuration: Mapper Configuration | Relationship Configuration | Inheritance Mapping | Advanced Collection Configuration
Configuration Extensions: Declarative Extension |Association Proxy | Hybrid Attributes | Mutable Scalars |Ordered List
ORM Usage: Session Usage and Guidelines | Query API reference | Relationship Loading Techniques
Extending the ORM: ORM Event Interfaces | Internals API
Other: Introduction to Examples | Deprecated Event Interfaces | ORM Exceptions | Horizontal Sharding | Alternate Instrumentation
3.SQLAlchemy 文档 - SQLAlchemy Core(中文版)
这里的文描述了关于 SQLAlchemy 的的 SQL 渲染引擎的相关内容,包括数据库 API 的集成,事务的集成和数据架构描述服务。与以领域为中心的 ORM 使用模式相反,SQL 表达式语言提供了一个数据构架为中心的使用模式。
首先请阅读: SQL 表达语言指南
SQL 内置的内容: SQL 表达式 API
引擎,连接,缓冲池: 引擎配置 | 连接,事务 | 连接池
数据构架定义: 数据表和数据列 | 数据库注入(反射) | 默认的插入与更新 | 数据约束和索引 | 使用数据定义语言 (DDL)
数据类型: 基本概况 | 基础数据类型 | SQL 的标准数据类型 | 与数据库有关的特定数据类型 | 内置自定义数据类型 | 定义新的操作符 | API
扩展核心: SQLAlchemy 的事件 | 核心事件接口 | 自定义 SQL 结构 | 内部 API
其它: 运行时检查 API | 已过时事件接口 | 核心异常
http://www.uifanr.com/
The breadth of SQLAlchemy’s SQL rendering engine, DBAPI integration, transaction integration, and schema description services are documented here. In contrast to the ORM’s domain-centric mode of usage, the SQL Expression Language provides a schema-centric usage paradigm.
Read this first: SQL Expression Language Tutorial
All the Built In SQL: SQL Expression API
Engines, Connections, Pools: Engine Configuration |Connections, Transactions | Connection Pooling
Schema Definition: Tables and Columns | Database Introspection (Reflection) | Insert/Update Defaults |Constraints and Indexes | Using Data Definition Language (DDL)
Datatypes: Overview | Generic Types | SQL Standard Types| Vendor Specific Types | Building Custom Types | Defining New Operators | API
Extending the Core: SQLAlchemy Events | Core Event Interfaces | Creating Custom SQL Constructs | Internals API
Other: Runtime Inspection API | Deprecated Event Interfaces| Core Exceptions
Connect to MSSQL Database using Flask-SQLAlchemy
我正在尝试通过SQLAlchemy连接到本地MSSQL数据库。
以下是我的\uu init\uuuuy
文件的代码摘录:
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)app.config[''SQLALCHEMY_DATABASE_URI''] = ''mssql+pyodbc://HARRISONS-THINK/LendApp''db = SQLAlchemy(app)SQLALCHEMY_TRACK_MODIFICATIONS = False
下面是在我的型号.py
文件:
from LendApp import dbclass Transaction(db.model): transactionID = db.Column(db.Integer, primary_key=True) amount = db.Column(db.Integer) sender = db.Column(db.String(80)) receiver = db.Column(db.String(80)) def __repr__(self): return ''Transaction ID: {}''.format(self.transactionID)
然后我使用Pycharm中的Python控制台连接到数据库
这两条线的执行:
>>> from LendApp import db>>> db.create_all()
This is resulting in the following error:
DBAPIError: (pyodbc.Error) (''IM002'', ''[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)'')
我唯一能想到的就是我的数据库连接字符串不正确。我试着把它改成更标准的Pyodbc连接
字符串和includingdriver={sqlserver}
但不占上风。如果有人能帮我解决这个问题,我将不胜感激。
谢谢
答案1
小编典典所以我遇到了一个非常类似的问题,通过做
跟随。
遵循[SQL炼金术]
[文件](http://docs.sqlalchemy.org/en/latest/dialogs/mssql.html#模块-
sqlalchemy.dialones.mssql语言.pyodbc)我发现我可以使用我的pyodbc连接
字符串如下:
# Python 2.ximport urllibparams = urllib.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)# Python 3.ximport urllibparams = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)# using the above logic I just did the followingparams = urllib.parse.quote_plus(''DRIVER={SQL Server};SERVER=HARRISONS-THINK;DATABASE=LendApp;Trusted_Connection=yes;'')app.config[''SQLALCHEMY_DATABASE_URI''] = "mssql+pyodbc:///?odbc_connect=%s" % params
This then caused an additional error because I was also using Flask-Migrate
and apparently it doesn’t like % in the connection URI. So I did some more
digging and found this post.
I then changed the following line in my ./migrations/env.py
file
From:
from flask import current_appconfig.set_main_option(''sqlalchemy.url'', current_app.config.get(''SQLALCHEMY_DATABASE_URI''))
To:
from flask import current_appdb_url_escaped = current_app.config.get(''SQLALCHEMY_DATABASE_URI'').replace(''%'', ''%%'')config.set_main_option(''sqlalchemy.url'', db_url_escaped)
在做了所有这些之后,我能够进行迁移,一切看起来都像
它现在工作正常。
Flask 和 Heroku sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres
如何解决Flask 和 Heroku sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres
当我跑步时
join xyz
它给出了这个错误:
heroku run python
>>> from app.main import app
>>> app.config[''sqlALCHEMY_DATABASE_URI'']
''postgres://<url string>'' # the database url is passed correctly
>>> from app.main import db
>>> db.create_all()
我很困惑,因为我是 Heroku 和 Postgresql 的新手(直到现在一直在使用 sqlite)而且我遵循的教程都没有解释它是如何连接到 Flask 的,只有如何做到这一点。所以我不明白要解决什么问题。我应该在问题中包含任何其他代码吗?
(大多数其他问题 like this one 是拼写错误或无法解决此问题的错误。)
解决方法
这是一个对我有用的快速方法,在 Heroku 上安装了最新的 PostgreSQL:
SQLALCHEMY_DATABASE_URI = os.environ.get(''DATABASE_URL'').replace("://","ql://",1)
只需将 Heroku 中的 postgres://
(无法编辑)修改为 postgresql://
。
这是由于 sqlalchemy 库中的更改。这是在将方言(SQLALCHEMY_DATABASE_URI 中“:”之前的部分)名称 postgres
更改为 postgresql
时宣布的弃用。他们使用 github commit 发布了此 minor version release 中的这一重大更改,这是他们的政策规定。
Heroku 的默认方言是他们提供的 DATABASE_URL 中的 postgres
,它被翻译成 SQLALCHEMY_DATABASE_URI。如果更新不会破坏可能依赖它的其他库,Heroku 可以更新他们的 postgres 插件。
与此同时,您可以将 sqlalchemy 库固定回
或者,您可以更新代码以修改方言。
关于sqlalchemy MSSQL + pyodbc模式无和pyodbc sqlserver的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于2.SQLAlchemy 文档 - SQLAlchemy ORM(中文版)、3.SQLAlchemy 文档 - SQLAlchemy Core(中文版)、Connect to MSSQL Database using Flask-SQLAlchemy、Flask 和 Heroku sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres等相关内容,可以在本站寻找。
本文标签: