GVKun编程网logo

sqlalchemy MSSQL + pyodbc模式无(pyodbc sqlserver)

2

最近很多小伙伴都在问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)

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(中文版)

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(中文版)

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

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

如何解决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等相关内容,可以在本站寻找。

本文标签: