Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “我该怎么做?”;“提交”;我的炼金术声明?_Python_Sql_Sqlalchemy - Fatal编程技术网

Python “我该怎么做?”;“提交”;我的炼金术声明?

Python “我该怎么做?”;“提交”;我的炼金术声明?,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我的问题在底部,但请先阅读背景 背景: 我正在编写python代码,它消化我的队友的原始sql代码,并按原样通过sqlalchemy提交,例如: db=create_engine(sqlstr1) //make the connection just once sqlstr1="select top 5 * from some_table" //keep refreshing this string with //successive excerpts from a

我的问题在底部,但请先阅读背景

背景:

我正在编写python代码,它消化我的队友的原始sql代码,并按原样通过sqlalchemy提交,例如:

db=create_engine(sqlstr1) //make the connection just once
sqlstr1="select top 5 * from some_table" //keep refreshing this string with
               //successive excerpts from a .sql file ..
db_con.execute(sqlstr1) //and submit them.
…所以只要想象一下,整个.sql文件都是以这种方式通过的

预测反应:为什么会这样?因为我和我的团队都没有时间学习真正的炼金术;我们只是想让原始sql代码自动化。我想我不是唯一一个这样使用sqlalchemy的人

我注意到一个基本的select语句将立即生效。但任何类似于drop/CREATETABLE语句的语句后面都必须跟一个“Commit”语句,否则不会生效。所以我只是在我的循环中写入一个db_con.execute(“connect”)


好的,那么问题是:有没有更好的方法提交这些表语句?

不要浪费时间欺骗SQLAlchemy做你想做的事情。只需为您的SQL品牌使用psycopg2或同等产品
sqlite3
甚至内置在标准库中。SQLAlchemy适用于需要实际对象关系映射的人,而您显然没有使用它。我同意Kevin的观点,但有一些方法可以使用SQLAlchemy来执行原始SQL(如果您关心到其他RDBMS的可移植性,那么可以生成原始SQL)。如果您希望以后使用其他功能,最好现在就设置SQLAlchemy,而不是稍后再重新编码。然而,您的帖子中让我印象深刻的“哲学”讨论(我基本上同意上面的两条评论)是,在
drop/create table
语句之后,您需要一个
commit
。在我所知道的数据库(postgres、oracle)中,即使禁用了
autocommit
,也不需要在
create table
之后提交。这是有意义的:通常情况下,创建一个表并根据代码的决定,必须回滚该创建。你在使用什么数据库?您是如何进行提交的,
db\u con.commit()
?你是如何创建你的表格的?lrnzcig,我们在红移。所以我使用的基本上是Kevin建议的psycopg2。我不知道为什么需要提交,我只是发现它使我的代码工作,所以我就这样做了。