我正在代码中设置数据库,但在尝试弄清楚如何按照我想要的方式建立多对多关系时遇到困难。
基本上,我有一个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 在 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) 有什么方法可以将当前修订号存储在数据库中吗?我的意思是,当我生成迁移和升级头时,如何在数据库中插入此修订号,并在下次进行迁移时检查表中的此修订号。
我正在使用以下查询从 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)
如果我想使用第二种风格(引擎作为参数)我该怎么办?
我正在尝试将 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) 要求:从数据框/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) 我想动态地将列添加到数据库中的表中,因为我不想在 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上的说明进行操作,并执行了以下操作:
我正在尝试为用于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语句取回行的情况和没有取回行的情况。
我想将 pandas DataFrame 更新插入到 SQL Server 表中。这个问题对于 PostgreSQL 有一个可行的解决方案,但 T-SQLON CONFLICT没有INSERT. 我怎样才能为 SQL Server 完成同样的事情?
我正在将 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) sqlalchemy ×10
python ×9
pandas ×4
alembic ×2
postgresql ×2
sql-server ×2
mysql-python ×1
pylons ×1
pymysql ×1
pyramid ×1
python-3.x ×1
sql ×1
testing ×1
unit-testing ×1
upsert ×1
utf-8 ×1