我想从数据库中获取一个对象(如果它已经存在)(基于提供的参数),或者如果不存在则创建它.
Django get_or_create(或来源)这样做.SQLAlchemy中是否有等效的快捷方式?
我目前正在明确地写出这样的:
def get_or_create_instrument(session, serial_number):
instrument = session.query(Instrument).filter_by(serial_number=serial_number).first()
if instrument:
return instrument
else:
instrument = Instrument(serial_number)
session.add(instrument)
return instrument
Run Code Online (Sandbox Code Playgroud) 我读过不少资源(AO.1,2),但我无法得到PostgreSQL关于冲突忽略行为SQLAlchemy的工作.
我用这个被接受的答案作为基础,但它给出了
SAWarning: Can't validate argument 'append_string'; can't locate any SQLAlchemy dialect named 'append'
Run Code Online (Sandbox Code Playgroud)
我已经尝试将postgresql方言添加到@compile子句,重命名我的对象,但它不起作用.我也尝试使用str(insert())+ " ON CONFILCT IGNORE"没有结果.(顺便说一句,这并不奇怪)
如何才能将On CONFLICT IGNORE其添加到插入中?我喜欢建议的解决方案,因为我可以看到自己不想要IGNORE每个人的行为INSERT
PS.使用python 2.7(不介意升级到3.4/3.5),最新的sqlalchemy(1.x)
我使用SQLAlchemy连接到Python中的不同数据库,但没有使用ORM支持,因为由于几个原因无法实现.
主要是我使用像这样的东西构建一个复杂的SQL查询
sql += "AND fieldname = '%s'" % myvar
Run Code Online (Sandbox Code Playgroud)
在我的情况下,不是SQL注入的问题,因为数据总是来自受信任的来源,但即使源是可信的,它也可能包含可能破坏查询的字符',%或_.
主要是,我需要逃避它们,我想知道是否存在我可以重复使用的已存在的转义函数.
我正在将 SQLAlchemy Core 与 MySQL 数据库一起使用,但很难找到 INSERT IGNORE / DUPLICATE KEY UPDATE 的解决方案。如果有办法处理这个问题,我讨厌在代码中手动编写一次性查询。我发现的大多数解决方案或讨论都围绕 ORM,而不是核心。甚至其中一些是死链接。甚至有可能吗?
Python版本 - 2.7.6
熊猫版 - 0.17.1
MySQLdb版本 - 1.2.5
在我的数据库(PRODUCT)中,我有一个表(XML_FEED).表XML_FEED很大(百万记录)我有一个pandas.DataFrame()(PROCESSED_DF).数据框有数千行.
现在我需要运行它
REPLACE INTO TABLE PRODUCT.XML_FEED
(COL1, COL2, COL3, COL4, COL5),
VALUES (PROCESSED_DF.values)
Run Code Online (Sandbox Code Playgroud)
题:-
有没有办法REPLACE INTO TABLE在熊猫中跑?我已经检查过,pandas.DataFrame.to_sql()但这不是我需要的.我不喜欢XML_FEED在大熊猫中读表,因为它非常庞大.
我想使用 SQLAlchemy 提供的 ON DUPLICATE KEY UPDATE 选项来更新插入一堆记录。
这些记录已使用以下命令成功插入Python(其中connection是engine.connect()对象,table是Table对象)
record_list = [{'col1': 'name1', 'col2': '2015-01-31', 'col3': 27.2},
{'col1': 'name1', 'col2': '2016-01-31', 'col3': 25.2}]
query = insert(table)
results = connection.execute(query, record_list)
Run Code Online (Sandbox Code Playgroud)
查看https://docs.sqlalchemy.org/en/13/dialects/mysql.html#insert-on-duplicate-key-update-upsert上的文档以及许多 SO 问题(包括可能的建议在SQLAlchemy ON DUPLICATE KEY UPDATE的评论下)我尝试了许多不同的示例,但没有一个我可以看到使用此方法通过 upsert 语句处理多个记录。
我正在尝试沿着
query = insert(table).values(record_list)
upsert_query = query.on_duplicate_key_update()
results = connection.execute(upsert_query)
Run Code Online (Sandbox Code Playgroud)
但要么遇到 .on_duplicate_key_update() 要求不能为空的问题,要么 SQL 语法错误。
如果有人成功管理并可以帮助我处理这里的代码结构,我将非常感激。
python ×6
sqlalchemy ×5
mysql ×2
sql ×2
django ×1
escaping ×1
pandas ×1
postgresql ×1
replace ×1