我正在使用flask SQLAlchemy,并且我具有以下代码,可以通过MySQL数据库中的原始SQL查询从数据库中获取用户:
connection = engine.raw_connection()
cursor = connection.cursor()
cursor.execute("SELECT * from User where id=0")
results = cursor.fetchall()
results
变量是一个元组,我希望它的类型为dict()。有没有办法做到这一点?
当我使用pymysql建立数据库连接时,我能够做到
cursor = connection.cursor(pymysql.cursors.DictCursor)
SQLAlchemy中是否有类似的东西?
注意:我要进行此更改的原因是摆脱在代码中使用pymysql的限制,而仅使用SQLAlcehmy功能,即,我不想在我的代码中的任何地方“导入pymysql”。
答案 0 :(得分:0)
如果您使用results是一个元组,我希望它的类型为dict()
engine.execute
而不是raw_connection()
, SQLAlchemy已经为您完成了此操作。使用engine.execute
,fetchone
将返回SQLAlchemy Row
对象,而fetchall
将返回list
个对象中的Row
个对象。像Row
一样,可以通过键访问dict
对象:
sql = "SELECT FirstName, LastName FROM clients WHERE ID = 1"
result = engine.execute(sql).fetchone()
print(type(result)) # <class 'sqlalchemy.engine.result.Row'>
print(result['FirstName']) # Gord
如果您需要一个真实的dict
对象,则可以将其转换:
my_dict = dict(result)
print(my_dict) # {'FirstName': 'Gord', 'LastName': 'Thompson'}
答案 1 :(得分:0)
我会亲自使用熊猫:
import pandas as pd
connection = engine.raw_connection()
df = pd.read_sql_query('SELECT * from User where id=0' , connection)
mydict = df.to_dict()
答案 2 :(得分:0)
如果raw_connection()
返回一个PyMySQL Connection
对象,那么您可以像这样继续使用DictCursor
:
engine = create_engine("mysql+pymysql://root:whatever@localhost:3307/mydb")
connection = engine.raw_connection()
cursor = connection.cursor(pymysql.cursors.DictCursor)
cursor.execute("SELECT 1 AS foo, 'two' AS bar")
result = cursor.fetchall()
print(result) # [{'foo': 1, 'bar': 'two'}]
答案 3 :(得分:0)
您可以使用sqlalchemy游标和游标的描述。
<div class="parent">
<div class="child">Some Stuff</div>
</div>