在 sqlalchemy 中重新格式化行数

reformat row count in sqalchemy

我是 运行 一个简单的命令,用于获取和打印 MySQL 数据库中 table 中的行数,以便 RunDeck 可以记录它,并希望要么在格式化结果方面有所帮助,要么是一种更漂亮的方法。

from sqlalchemy import create_engine

devhost = 'host'
devuser = 'user'
devpassword = 'scipiodestroyedhannibalatzama'

engine = f"mysql+pymysql://{devuser}:{devpassword}@{devhost}/germans_got_lucky"
connection = create_engine(engine)

rows = str(connection.execute("SELECT COUNT(Day) FROM teutoburg_forest").fetchall())
    print(rows)

returns

[(1706,)]

但我想 return

1706

有没有简单的方法可以做到这一点?

这里有三种可能,第一种:

from sqlalchemy import create_engine

devhost = 'host'
devuser = 'user'
devpassword = 'scipiodestroyedhannibalatzama'

engine = f"mysql+pymysql://{devuser}:{devpassword}@{devhost}/germans_got_lucky"
connection = create_engine(engine)

rows = len(connection.execute("SELECT Day FROM teutoburg_forest").fetchall())
print(rows)

第二个:

from sqlalchemy import create_engine

devhost = 'host'
devuser = 'user'
devpassword = 'scipiodestroyedhannibalatzama'

engine = f"mysql+pymysql://{devuser}:{devpassword}@{devhost}/germans_got_lucky"
connection = create_engine(engine)

rows = connection.execute("SELECT Day FROM teutoburg_forest").count
print(rows)

或第三个:

from sqlalchemy import create_engine

devhost = 'host'
devuser = 'user'
devpassword = 'scipiodestroyedhannibalatzama'

engine = f"mysql+pymysql://{devuser}:{devpassword}@{devhost}/germans_got_lucky"
connection = create_engine(engine)

rows = connection.execute("SELECT COUNT(Day) FROM teutoburg_forest").fetchone()
print(rows[0])

This answer 完美地去除了不需要的字符。

rows = str(connection.execute("SELECT COUNT(Day) FROM teutoburg_forest").fetchall())
print(rows)
[(1706,)]
print(''.join([n for n in rows if n.isdigit()]))
1706

.scalar() 给你所需要的:

conn.execute(text("SELECT count(tickers.ticker) FROM tickers")).scalar()

我还使用了 text() 子句,因为它在 sqlalchemy>=1.4

中是必需的