我正在尝试为用于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语句取回行的情况和没有取回行的情况。
这个问题涉及:django 1.5.1 with python 3.3和mysql 5.6.12
想要使用Django运行Mysql.如果配置了所有内容,甚至数据库都存在用户权限.尝试syncdb时出错:
ImportError: No module named 'MySQLdb'
Run Code Online (Sandbox Code Playgroud)
显然,Mysql-Lib缺少python.从petehunt/PyMySQL下载了主版本.尝试"python setup.py安装".说:
ImportError: No module named 'constants'
Run Code Online (Sandbox Code Playgroud)
下载了另一个版本.来自这里的tarball .运行"python setup.py install".似乎工作,试图运行syncdb命令"python manage.py syncdb".仍然:
ImportError: No module named 'MySQLdb'
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?提前致谢.
我知道这个主题的变体已经在别处讨论过,但其他线程都没有帮助.
我想将一个字符串从python移交给sql.然而,可能会发生撇号(')出现在字符串中.我想用反斜杠逃脱它们.
sql = "update tf_data set authors=\'"+(', '.join(authors).replace("\'","\\\'"))+"\' where tf_data_id="+str(tf_data_id)+";"
Run Code Online (Sandbox Code Playgroud)
但是,这总是会\\'在我的字符串中给出.因此,反斜杠本身被转义,并且sql语句不起作用.
有人可以帮助我,或者让我替代我这样做的方式吗?谢谢
import pymysql\n\nconn = pymysql.connect(host=\'127.0.0.1\', port=3306, user=\'root\',\n passwd=\'123456\',db=\'home\', charset="utf-8")\n\ncursor = conn.cursor()\ncursor.execute("""create table job_list(job varchar(30) , people varchar(30) , catagory varchar(30) , place varchar(30), publish varchar(30)) """)\n\ntry:\n cursor.execute("""INSERT INTO job_list(job,people,catagory,place,publish) VALUES (%s, %s, %s, %s, %s)""",\n ["\xe7\xae\x97\xe6\xb3\x95\xe5\xb7\xa5\xe7\xa8\x8b\xe5\xb8\x88", "2018\xe6\xaf\x95\xe4\xb8\x9a\xe7\x94\x9f", "\xe7\xa0\x94\xe5\x8f\x91", "\xe9\x9b\x85\xe5\x8a\xa0\xe8\xbe\xbe", "2018-03-28"])\n conn.commit()\nexcept pymysql.Error as e:\n print(e)\n\ncursor.close()\nconn.close()\nRun Code Online (Sandbox Code Playgroud)\n\n\n pymysql和 都会发生此错误mysql-connector-python。但不适用于 MySQL shell。MySQL shell 可以通过mysql -u root -p正常登录。
错误看起来像:
In [1]: import mysql.connector
In [2]: mydb = mysql.connector.connect(
...: host="localhost",
...: user="root",
...: passwd="password"
...: )
ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
或者
In [8]: import pymysql.cursors
In [9]: connection = pymysql.connect(host='localhost',
...: user='root',
...: password='password',
...: db='db',
...: cursorclass=pymysql.cursors.DictCursor)
...
OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
Run Code Online (Sandbox Code Playgroud)
Python 3.7 版,在 Mac OSX 10.14 上运行。MySQL 版本 …
此代码在我的机器上运行正常,但在 AWS Lambda 中出现错误:
import pymysql
dbhost = 'database.ap-south-1.rds.amazonaws.com'
dbuser = 'admin'
dbpass = 'admin123'
dbname = 'classicmodels'
connection = pymysql.connect(host=dbhost, user=dbuser, password=dbpass, database=dbname)
def lambda_handler():
cursor = connection.cursor()
cursor.execute('SELECT * FROM Persons')
rows = cursor.fetchall()
for row in rows:
print ("{0} {1} {2}".format(row[0], row[1], row[2]))
lambda_handler()
Run Code Online (Sandbox Code Playgroud)
{
"errorMessage": "lambda_handler() takes 0 positional arguments but 2 were given",
"errorType": "TypeError",
"requestId": "fb790715-91f1-4f7a-961f-b83485d23b68",
"stackTrace": [" File \"/var/runtime/awslambdaric/bootstrap.py\", line 149, in handle_event_request\n response = request_handler(event, lambda_context)\n"
]
}
Function Logs
START RequestId: …Run Code Online (Sandbox Code Playgroud) pymysql ×6
python ×4
mysql ×2
aws-lambda ×1
django ×1
python-3.x ×1
sqlalchemy ×1
str-replace ×1
testing ×1
unit-testing ×1