标签: sqlalchemy

如何在 SQLAlchemy 中正确处理这种多对多关系?收到“检测到双向属性冲突”

我正在代码中设置数据库,但在尝试弄清楚如何按照我想要的方式建立多对多关系时遇到困难。

基本上,我有一个User班级,其中有一个与班级的 m2m Team。事实上,一个团队有很多用户,一个用户可以是多个团队的一部分。到目前为止一切都很好。当我想向团队的用户授予“管理员”权限时,问题就出现了。

我尝试使用关联对象,但我不知道如何将关系标记为管理员。因此,我创建了第二个映射表,将团队映射到用户表中的管理员。如图所示:

Base = declarative_base()

# Many to Many relationship mapping tables
user_team_map = Table(
    'user_team_map', Base.metadata,
    Column('user_id', Integer, ForeignKey('users.id'), primary_key=True),
    Column('team_id', Integer, ForeignKey('teams.id'), primary_key=True)
)

admin_team_map = Table(
    'admin_team_map', Base.metadata,
    Column('user_id', Integer, ForeignKey('users.id'), primary_key=True),
    Column('team_id', Integer, ForeignKey('teams.id'), primary_key=True)
)

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    first_name = Column(String(24), nullable=False)
    teams = relationship('Team', secondary=user_team_map, back_populates='users')
    admin_of = relationship('Team', secondary=admin_team_map, back_populates='users')


class Team(Base):
    __tablename__ = 'teams'
    id = Column(Integer, primary_key=True) …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy relational-database

1
推荐指数
1
解决办法
1530
查看次数

SQLALchemy 增加了显着的过载。SQLAlchemy 对象没有属性“dateTime”

我的代码有问题,尝试使用 python 在 Flask 中设置 SQLAlchemy 数据库。代码:

谢谢您的帮助。

尝试重新安装 SQLAlchemy。

我使用的是公司笔记本电脑,应该不会有问题吧?

from flask import Flask, render_template, url_for
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

class Todo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(200), nullable=False)
    date_created = db.Column(db.DateTime, default=datetime

def __repr__(self):
    return '<Task %r>' % self.id

@app.route('/', methods=['POST', 'GET'])
def index():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True)
(env) C:\Users\rodrigs\Documents\PythonFlaskApp>app.py
C:\Users\rodrigs\Documents\PythonFlaskApp\env\lib\site-packages\flask_sqlalchemy\__init__.py:835: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

1
推荐指数
1
解决办法
4390
查看次数

Alembic:有没有办法在数据库中存储头修订号?

有什么方法可以将当前修订号存储在数据库中吗?我的意思是,当我生成迁移和升级头时,如何在数据库中插入此修订号,并在下次进行迁移时检查表中的此修订号。

python sqlalchemy alembic

1
推荐指数
1
解决办法
1530
查看次数

(MySQLdb._exceptions.ProgrammingError) 格式字符串参数不足

我正在使用以下查询从 mysql 数据库读取数据:
设置:

conn = MySQLdb.connect(host='127.0.0.1', port=3306, user='**', passwd='**', db='***')
engine = create_engine('mysql+mysqldb://***')

sql = 'show tables like "{}"'.format('aTable_' + '%')
Run Code Online (Sandbox Code Playgroud)

选项-1:这样就可以了

a1 = pd.read_sql_query(sql, conn)
Run Code Online (Sandbox Code Playgroud)

选项2:这将抛出错误:
ProgrammingError:(MySQLdb.exceptions.ProgrammingError )格式字符串的参数不足[SQL:显示类似“aTable %”的表](此错误的背景位于:http://sqlalche.me/ e/f405 )

a1 = pd.read_sql_query(sql, engine)

Run Code Online (Sandbox Code Playgroud)

如果我想使用第二种风格(引擎作为参数)我该怎么办?

python sqlalchemy mysql-python pandas

1
推荐指数
1
解决办法
2824
查看次数

如何将 UTF8 字符从 pandas 导出到 MS SQL

我正在尝试将 pandas 中的表导出到 Microsoft SQL Server Express 数据库。

Pandas 读取编码为 utf8 的 CSV 文件。如果我执行 df.head(),我可以看到 pandas 正确显示外文字符(它们是希腊字母)

但是,导出到 SQL 后,这些字符显示为问号和零的组合。

我究竟做错了什么?

我找不到 to_sql() 有任何设置编码的选项。我想我必须在设置 SQL 引擎时更改语法,但具体如何更改呢?

这就是我一直在尝试的:

import numpy as np
import pandas as pd
from sqlalchemy import create_engine, MetaData, Table, select
import sqlalchemy as sqlalchemy


ServerName = my_server_name
Database = my_database
params = '?driver=SQL+Server+Native+Client+11.0'
engine = create_engine('mssql+pyodbc://' + ServerName + '/'+ Database + params, encoding ='utf_8', fast_executemany=True )
connection = engine.raw_connection()
cursor = connection.cursor()

file_name = my_file_name

df = …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlalchemy utf-8 pandas

1
推荐指数
1
解决办法
2751
查看次数

将数据框/CSV 中的批量数据插入或更新到 PostgreSQL 数据库

要求:从数据框/CSV(无论哪种套件)中 插入新数据并批量更新现有数据(行数> 1000)并将其保存在 PostgreSQL 数据库中。

表:TEST_TABLE

CREATE TABLE TEST_TABLE (
itemid varchar(100)  NOT NULL PRIMARY KEY,
title varchar(255),
street varchar(10),
pincode VARCHAR(100));

INSERT: ['756252', 'tom title', 'APC Road', '598733' ], 
        ['75623', 'dick title', 'Bush Road', '598787' ], 
        ['756211', 'harry title', 'Obama Street', '598733' ]
Run Code Online (Sandbox Code Playgroud)

数据框内容:

data = [['756252', 'tom new title', 'Unknown Road', 'pin changed' ], 
        ['75623', 'dick new title', 'Bush Road changed', '598787 also changed' ], 
        ['756211', 'harry title', 'Obama Street', '598733'],
        ['7562876', 'new1 data …
Run Code Online (Sandbox Code Playgroud)

python sql postgresql sqlalchemy pandas

1
推荐指数
1
解决办法
5763
查看次数

使用 sqlalchemy、alembic 将列动态添加到现有表

我想动态地将列添加到数据库中的表中,因为我不想在 SQLalchemy 类中设置表时指定所有列

为了解决这个问题,我使用 alembic 将列添加到表中,但我遇到了问题。

在我的 python 脚本中,我定义了一个类,如下所示。

DATABASE_URL_dev = "postgresql+psycopg2://user:password@localhost:5432/testdb"

engine = create_engine(DATABASE_URL_dev)
Base = declarative_base(engine)


class my_class1(Base):
    __tablename__ = "test1"

    id = Column(Integer, primary_key=True)
    list = Column(String)

def  loadsession():
    Base.metadata.create_all(engine)
    Session = sessionmaker(bind=engine)
    session = Session()
    return session

session = loadsession()
Run Code Online (Sandbox Code Playgroud)

现在我想向数据库中的表 test1 添加一个新列(“new_column”)。

然后,我使用 Alembic 按照https://alembic.sqlalchemy.org/en/latest/tutorial.html上的说明进行操作,并执行了以下操作:

  1. 通过运行 pip install alembic 安装了 alembic
  2. 使用 alembic init alembic 创建环境
  3. 通过在 sqlalchemy.url 输入“postgresql+psycopg2://user:password@localhost:5432/testdb”来编辑 .ini 文件
  4. 通过运行 alembic revision -m "add a column " 创建迁移脚本
  5. 然后,我通过在 Upgrade() 中添加以下“op.add_column('test1', sa.Column('new_column', …

python sqlalchemy alembic

1
推荐指数
1
解决办法
1万
查看次数

如何在“with”上下文管理器中模拟 sqlalchemy 执行输出

我正在尝试为用于sqlalchemy连接 MySQL 的 python 脚本编写单元测试。

我的函数如下所示:

def check_if_table_exists(db):
    with db.connect() as cursor:
        table_exists = cursor.execute(f"SHOW TABLES LIKE '{PRIMARY_TABLE_NAME}';")
        if not table_exists.rowcount:
            cursor.execute(f"CREATE TABLE...
Run Code Online (Sandbox Code Playgroud)

我找不到任何关于如何首先模拟的资源db.connect(),反过来也需要对其进行execute模拟,以便我可以测试不同的table_exists场景。也有可能我的代码根本不适合正确的单元测试,我需要首先使用游标对象调用该函数。

作为参考,db是 的输出sqlalchemy.create_engine

TLDR 我需要帮助开始单元测试,以应对我为SHOW语句取回行的情况和没有取回行的情况。

python testing unit-testing sqlalchemy pymysql

1
推荐指数
1
解决办法
4222
查看次数

如何将 pandas DataFrame 更新插入到 Microsoft SQL Server 表?

我想将 pandas DataFrame 更新插入到 SQL Server 表中。这个问题对于 PostgreSQL 有一个可行的解决方案,但 T-SQLON CONFLICT没有INSERT. 我怎样才能为 SQL Server 完成同样的事情?

python sql-server sqlalchemy upsert pandas

1
推荐指数
1
解决办法
8473
查看次数

更新 Pyramid 应用程序时 SQLAlchemy 出现的 ZopeTransactionEvents 错误是什么?

我正在将 Pyramid/SQLAlchemy 遗留代码从在 Python 2.7 下正常工作的应用程序更新到 Python 3.8,并在本地运行它。所有必要的要求都已安装,并且 setup.py 运行没有错误。

initialise使用本地 .ini 文件运行时,一切顺利,数据库表 (MariaDB) 均已写入。

在 models.py 中

from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    relationship,
    backref,
    synonym,
    )
from zope.sqlalchemy import ZopeTransactionEvents
#[...]
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionEvents()))
Run Code Online (Sandbox Code Playgroud)

'ZopeTransactionEvents' object has no attribute 'after_commit'在主应用程序中,在获得最终输入并尝试将其添加到数据库后,此函数失败DBSession.add(user)

def do_create_admin_user(self):
    from ..models import User
    from getpass import getpass
    print("Create an administrative user")
    fullname = input("full name: ")
    username = input("username: ")
    if not username:
        self.log.info("missing username - aborted")
        return
    if len(username) …
Run Code Online (Sandbox Code Playgroud)

python pylons sqlalchemy python-3.x pyramid

1
推荐指数
1
解决办法
460
查看次数